什麼是f
實際類型?所以我可以聲明這種類型的矢量?
f
的類型只能使用auto
來推導。您可以使用
std::vector<decltype(f)> v;
聲明此類型的vector
然而,它並不是非常有用。看起來驚人相似的Lambda函數有不同的類型。更糟糕的是,具有相同主體的lambda函數也有不同的類型。
auto f = [] (std::string msg) -> void {
std::cout << msg << std::endl;
};
auto g = [] (std::string msg) -> void {
std::cout << msg << std::endl;
};
auto h = [] (std::string msg) -> void {
std::cout << msg << '+' << msg << std::endl;
};
鑑於上述功能,您不能使用
std::vector<decltype(f)> v;
v.push_back(f); // OK
v.push_back(g); // Not OK
v.push_back(h); // Not OK
你最好的選擇是創建std::function
的std::vector
秒。您可以將該lambda函數添加到該std::vector
。鑑於f
和g
上述定義,你可以使用:
std::vector<std::function<void(std::string)>> v;
v.push_back(f);
v.push_back(g);
v.push_back(h);
「*什麼是實際的類型F *?」 無法命名。 「*所以我可以聲明這種類型的向量?」是的,但它不會幫助,因爲lambdas不是默認構造的。 'std :: vector>'可能適合你的目的。 –
ildjarn
如果lambda沒有關閉,你實際上仍然可以使用指針,btw – vu1p3n0x
如果你不需要一個向量(即如果在編譯時已知實際lambda表達式),你可以創建一個lambdas的std :: tuple。 – dats