我有一个容器类模板,其中包含几种不同类型的成员。我想传递一个用于每个元素的函子。我可以用以下代码做我想做的事:
#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相同的效果吗?还是至少可以让我定义调用方法内部的操作(使用模板是不可能的)?
答案 0 :(得分:6)
是否可以使用lambda函数来实现与struct相同的效果?还是至少可以让我定义调用方法内部的操作(使用模板是不可能的)?
好的。
但仅从C ++ 14(引入通用lambda)开始
container.run_operation(
[](auto t){ std::cout << "value is " << t << std::endl; });