如何将通用lambda传递到功能中
How to pass generic lambda into function
我有以下C 代码:
template <class T1, class T2, class T3>
void MetaTypeHandler(T1 lambda1, T2 lambda2, T3 lambda3) {
lambda1(1);
lambda2('x');
lambda3(true);
}
int main() {
auto f = [] (auto x) {};
MetaTypeHandler(f,f,f);
}
多次传递f
是丑陋的。是否可以写MetaTypeHandler()
,以便f
仅通过1或2次?我认为模板模板参数可能会有所帮助,但不能缠绕我的头。
我不明白问题。
它是通用 lambda。
基本上是带有模板 operator()
的结构对象。
因此,您只能将其传递一次,然后将其与所需的所有类型一起使用
#include <iostream>
template <typename T>
void MetaTypeHandler (T lambda)
{
lambda(42);
lambda('x');
lambda("abc");
lambda(true);
}
int main()
{
MetaTypeHandler(
[](auto const & x){ std::cout << "x is " << x << std::endl;});
}
您可以提供一个过载:
#include <iostream>
template <class T1, class T2, class T3>
void MetaTypeHandler(T1 lambda1, T2 lambda2, T3 lambda3) {
lambda1(1);
lambda2('x');
lambda3(true);
}
template <class T>
void MetaTypeHandler(T lambda)
{
MetaTypeHandler(lambda, lambda, lambda);
}
int main() {
auto f = [] (auto x) {std::cout << x << std::endl;};
MetaTypeHandler(f);
}
因此,您可以通过3个不同的处理程序或执行3次处理程序。
live
相关文章:
- "lambda capture"正常功能?
- 传递具有移动捕获功能的 lambda
- Lambda的功能C++奇怪的行为
- 将带捕获功能的 lambda 传递给模板化函数
- 基于lambda arity的专门功能模板
- 使用lambda在功能指针铸造时双免费
- 如何将功能机体转换为lambda
- 如何在C 中调用此lambda功能
- 如何将通用lambda传递到功能中
- 为什么在传递lambda而不是功能指针时不能推断模板参数
- 如何使用C lambda将成员功能指针转换为普通功能指针,以用作回调
- 如何将lambda功能传递给通用参数作为参数
- 未评估上下文中的默认模板参数和 lambda:错误还是功能?
- 为什么我的按钮类项目共享相同的lambda功能
- 用C 中的lambda替换功能
- Lambda通过参考传递的功能
- 如何否定lambda功能结果
- 如何更新嵌套lambda功能(C )中的变量
- C lambda作为班级成员的功能:奇怪的行为
- 尝试在静态功能(C )中使用lambda函数