5

次のコードを検討してください。

//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ことを示す方法はありますか?

4

2 に答える 2