次のコードを検討してください。
//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));
class Singleton{
public:
static Singleton *instance();
void foo();
void bar();
private:
Singleton();
};
void Singleton::foo(){
//this leads to an error ('this' was not captured for this lambda function)
void(*func_pointer)(void) = []{
Singleton::instance()->bar();
};
some_library_method(func_pointer);
}
some_library_method
関数ポインターを引数として期待する、変更できない関数 (上記を参照) を呼び出したいと考えています。呼び出しは、クラス メンバーで行う必要がありfoo()
ます。そこにあるクラスメンバーにアクセスできないことは知っていますが、静的な方法でシングルトンクラスにアクセスしたいだけです(シングルトンインスタンスを取得します)。
ラムダ式を変更して、ターゲット コンパイラである g++ v4.7.2 を参照する必要がないthis
ことを示す方法はありますか?