方法模板作为函子

时间:2019-05-06 17:21:20

标签: c++ templates lambda generic-lambda

我有一个容器类模板,其中包含几种不同类型的成员。我想传递一个用于每个元素的函子。我可以用以下代码做我想做的事:

#include <iostream>

template <typename T1, typename T2>
class MyContainer
{
public:
  template <typename Op>
  void run_operation(Op op)
  {
    op(t1);
    op(t2);
  }

  T1 t1;
  T2 t2;


};

struct OutputOperation
{
  template <typename T>
  void operator()(T t)
  {
    std::cout << "value is " << t << std::endl;
  }
};

int main() {
  MyContainer<int, double> container;
  OutputOperation out_op;
  container.run_operation(out_op);

}

在使用模板operator()定义结构的同时,我缺少定义lambda函数时的便利。有什么方法可以使用lambda函数达到与struct相同的效果吗?还是至少可以让我定义调用方法内部的操作(使用模板是不可能的)?

1 个答案:

答案 0 :(得分:6)

  

是否可以使用lambda函数来实现与struct相同的效果?还是至少可以让我定义调用方法内部的操作(使用模板是不可能的)?

好的。

但仅从C ++ 14(引入通用lambda)开始

  container.run_operation(
     [](auto t){ std::cout << "value is " << t << std::endl; });