【发布时间】:2019-10-03 19:31:07
【问题描述】:
使用 C++20,我们可以使用模板化 lambda 来执行以下操作:
auto t = []<typename T>(T tmp){std::cout << tmp << std::endl;};
但是如果我需要通过 std::function 指定确切的类型怎么办? (不要依赖自动)。
是否可以将模板化的 lambda 存储到 std::function<> 包装器中?例如类似以下?
template<typename T>
std::function<void(T)> t = []<typename T>(T tmp){std::cout << tmp << std::endl;};
并像使用常规模板函数一样使用它?
【问题讨论】:
-
您要解决的实际问题是什么?请注意,通用 lambda 在 C++20 中并不是新的,我们从 C++14 开始就有了它们,只是特定的拼写是新的。
-
auto不是一个“模板化”的 lambda?喜欢auto t = [](auto tmp){std::cout << tmp << std::endl;}; -
我想将 lambda 作为非静态成员添加到类中。因此,它不能用 auto 定义。
-
无法抓住重点! “但如果我需要指定确切的类型怎么办?” lambda/函数调用的参数的确切类型?如果是这样,为什么我们在 lambda 定义中需要一个模板/自动?
-
我不想说
auto t = templated lambda。相反,我想说std::function<...> = templated lambda。