2017-05-20 12 views
1

このコードは動作しませ んなぜ私は見つけることができなかった。ラムダをラムダに渡すには?

#include <iostream> 
#include <functional> 

using namespace std; 

int main() 
{ 
    auto xClosure = [](const function<void(int&)>& myFunction) { 
    myFunction(10);}; 

    xClosure([] 
     (int& number) -> void 
     {cout<<number<<endl; 
     }); 
    return 0; 
} 

それが返されます。

g++ test.cc -o test -std=c++14 
test.cc:9:5: error: no matching function for call to object of type 'const function<void 
    (int &)>' 

答えて

9

これは、ラムダとは何の関係もありません:

void test(const function<void(int&)>& myFunction) { 
    myFunction(10); 
} 

これは同じ理由でコンパイルに失敗します。リテラル10int&にバインドすることはできません。

はたぶん、あなたはそうすると、あなたのラムダの署名を変更すると、あなたのコードのコンパイルを行う必要があります

const function<void(int)>& myFunction 

を意味しました。

関連する問題