如何将通用Lambda传递给函数

Bul*_*lat 3 c++ lambda templates generic-lambda c++14

我有以下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);
}
Run Code Online (Sandbox Code Playgroud)

经过f多次是丑陋的。是否有可能写MetaTypeHandler(),这样f传递只有1〜2次?我认为模板模板参数可能会有所帮助,但无法绕过它们。

max*_*x66 5

我不明白这个问题。

这是一个通用的 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;});
 }
Run Code Online (Sandbox Code Playgroud)