[C++]クラスのメンバ関数を別のクラスへ渡す

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジョセフソン接合
記事: 6
登録日時: 5年前

[C++]クラスのメンバ関数を別のクラスへ渡す

#1

投稿記事 by ジョセフソン接合 » 5年前

表題の通り、以下のようにFuncTest2内のメンバ関数f及びgをFuncTestへ
渡したいのですが、FuncTest2::bのみがうまく渡せて、他が渡せない理由がわかりません。
FuncTest2::bも暗黙的に型変換されているはずなので、"うまく"というのもおかしな話ですが。
ご教授願います。

コード:

#include <functional>
class FuncTest {
public:
	std::function<void(void)> _f;
	FuncTest(std::function<void(void)>& f) :_f(f){}
};
class FuncTest2 {
	std::function<void(void)> f = []() {std::cout << "f" << std::endl; };
	void g(void) { std::cout << "g" << std::endl; }
	FuncTest a(FuncTest2::f); //NG
	FuncTest b = FuncTest2::f; //OK
	FuncTest c(FuncTest2::g); //NG
	FuncTest d = FuncTest2::g; //NG
};
[\code]

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: [C++]クラスのメンバ関数を別のクラスへ渡す

#2

投稿記事 by usao » 5年前

bはFuncTestのコンストラクタが要求している型と合致しているfを指定しているからOK.

aは,多分,メソッドの宣言だと解釈されている.()ではなく{}を使えば通るかと.

c,dに関しては,gがメンバ関数なのだから呼び出すにはインスタンスが必要なわけで,その書き方のままじゃ無理なのは当たり前.
(ちなみにgをstaticにしても,FuncTestのコンストラクタが要求する型に暗黙的に変換はしてくれない,と思う.そこまで深く何段階も暗黙の型変換は行われないハズ.)

ってことかと.

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: [C++]クラスのメンバ関数を別のクラスへ渡す

#3

投稿記事 by usao » 5年前

ちなみに,a,bのところの FuncTest2:: は無意味.

ジョセフソン接合
記事: 6
登録日時: 5年前

Re: [C++]クラスのメンバ関数を別のクラスへ渡す

#4

投稿記事 by ジョセフソン接合 » 5年前

aは,多分,メソッドの宣言だと解釈されている.()ではなく{}を使えば通るかと.
まさにそのとおりでした。
エラーに型の名前ではありませんと表示されており、この意味がようやく理解できました。
波括弧の初期化というものがあったのですね。
ありがとうございます。
ちなみに,a,bのところの FuncTest2:: は無意味.
ありがとうございます。
上記コードのようなことをしているサイトを参考にしたとき書いてあったので
bでFuncTest2::無しで通っているのを確認してはいたのですが取り敢えずで書いていました。

勉強になりました。ありがとうございます。

返信

“C言語何でも質問掲示板” へ戻る