1

テンプレート関数でラムダ式を受け入れることができないのはなぜですか?

高低を検索した後、これはうまくいくと真剣に考えましたが、このC++コード。

template <typename F> int proc(const F& lam)
{
    return lam();
}
void caller()
{
    int i = 42;
    int j = proc( [&i]()->int{ return i/7; } );
}

次のエラーが表示されます。

$ g++ x.cc
x.cc: In function ‘void caller()’:
x.cc:11:44: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x [enabled by default]
x.cc:11:46: error: no matching function for call to ‘proc(caller()::<lambda()>)’
x.cc:11:46: note: candidate is:
x.cc:3:27: note: template<class F> int proc(const F&)

私はg ++ 4.6.3および4.7.2を使用してLinuxを使用しています

ラムダ式をパラメーターとして受信テンプレート関数に渡すために何をしなければならないか知っている人はいますか? -- std::function を使いたくないので、私の唯一の代替手段は、見苦しいファンクター パターンを作成することです。

更新:引数 const F& lam を宣言しようとしましたが、成功しませんでした。 Update2:コンパイラへの呼び出しを追加しました...

4

1 に答える 1

3

ラムダは左辺値ではないため、const 参照で渡す必要があります。

template <typename F> int proc(const F& lam)

g++ 4.7.2 では -std=c++11 を、g++ 4.6.3 では -std=c++0x を必ず使用してください。

于 2013-09-27T03:18:56.113 に答える