如何将通用 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 次。
我有以下 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 次。