如何将通用lambda传递到功能中

How to pass generic lambda into function

本文关键字:功能 lambda      更新时间:2023-10-16

我有以下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