C++ でのコールバックの特定の使用法を簡単にするマクロを作成しようとしています。私のすべてのコールバックはメンバー関数でありthis
、最初の引数と 2 番目の引数として取り、その型は共通の基本クラスから継承されます。
通常の方法は次のとおりです。
register_callback(boost::bind(&my_class::member_function, this, _1));
私は書きたいです:
register_callback(HANDLER(member_function));
常に同じクラス内で使用されることに注意してください。
typeof
悪い習慣と見なされているとしても__class__
、現在のクラス名を取得するためのマクロの欠如に対するかなりの解決策のように思えます。
次のコードが機能します。
typedef typeof(*this) CLASS;
boost::bind(& CLASS :: member_function, this, _1)(my_argument);
への引数として与えられるマクロでこのコードを使用することはできませんregister_callback
。
私はもう試した:
#define HANDLER(FUN) \
boost::bind(& typeof(*this) :: member_function, this, _1);
理解できない理由で機能しません。GCC ドキュメントの引用:
-construct
typeof
は、typedef 名を使用できる場所ならどこでも使用できます。
私のコンパイラは GCC 4.4 です。標準的なものを好む場合でも、GCC 固有のソリューションは受け入れられます。