次のコードを考えてみましょう:私は(上記some_library_method
を参照)を変更することはできません関数を呼び出すしたいC++ラムダ:ラムダでのアクセス静的メソッドは、「これは、このラムダ関数のために捕獲されていません」というエラーにつながる
//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);
}
を関数ポインタを引数として期待しています。コールは、クラスメンバfoo()
で行う必要があります。クラスメンバーにはアクセスできないことは知っていますが、静的な方法でクラスシングルトンにアクセスするだけです(シングルトンインスタンスを取得する)。
ターゲットコンパイラg ++ v4.7.2を表示するためにラムダ式を改変する方法はありますか?はthis
への参照が必要ですか?
偉大なため代わりにラムダのローカルに定義された正規の機能を使用することができ、T 'が悪いように思える ' – muffel