1

ラムダ関数を使用したいのですが、問題があります:

「グローバル スコープ」で std::function として宣言された関数への参照を格納する場合、問題はありません。

int myFunction()
{
    return 665;
}
int main()
{
    function<int()> functionRef = myFunction; //This works
}

同じことをしたいが、メソッドへの参照を保存したい場合:

//A class
class myClass
{
    public:
        int myMethod() 
        {
            return 666;
        }
};

//I create an instance:
myClass myInstance;

int main()
{
    function<int()> functionRef2 = myInstance.myMethod; //This doesn't work... why?
}

このエラーが表示されます:

エラー C3867: 'myClass::myMethod': 関数呼び出しに引数リストがありません。「&myClass::myMethod」を使用してメンバーへのポインタを作成します

「()」なしで関数を呼び出すとエラーが発生することはわかっていますが、この場合は関数を呼び出していません。変数に格納するだけです。Visual C++ 2010 を使用しています。ご協力ありがとうございます。

4

2 に答える 2

1

myClass::myMethodisと thisの型int (myClass::*)()は異なりますint(*)()

使えるものは

function<int()> functionRef2 = std::bind(&myClass::myMethod, &myInstance);
于 2013-08-11T21:35:13.293 に答える
1

の代わりにbind、ラムダを使用できます。

function<int()> functionRef2 = [&](int n){ return myInstance.myMethod(n); };
于 2013-08-11T22:07:02.780 に答える