1. ホーム
  2. c++

[解決済み] C++11でラムダ(同じ型)のベクターを作成できないのはなぜですか?

2023-02-08 13:52:01

質問

lambdaのvectorを作ろうとしましたが、失敗しました。

auto ignore = [&]() { return 10; };  //1
std::vector<decltype(ignore)> v;     //2
v.push_back([&]() { return 100; });  //3

2行目まで、それは は正常にコンパイルされます。 . しかし、3行目では コンパイルエラー :

error: no matching function for call to 'std::vector<main()::<lambda()>>::push_back(main()::<lambda()>)'.

関数ポインタのベクトルも関数オブジェクトのベクトルもいらない。しかし、関数オブジェクトのベクトルで ラムダ式、私のために働くだろう。これは可能ですか?

どのように解決するのですか?

すべてのラムダは という異なる型を持っています。 を持ちます。 -たとえ同じシグネチャを持っていてもです。のような実行時カプセル化コンテナを使用する必要があります。 std::function のような実行時カプセル化コンテナを使う必要があります。

など。

std::vector<std::function<int()>> functors;
functors.push_back([&] { return 100; });
functors.push_back([&] { return  10; });