我有一个容器类模板,其中包含几种不同类型的成员。我想传递一个为每个元素调用的函子。我可以用下面的代码做我想做的事:
#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 函数来达到与结构相同的效果?或者至少允许我在调用方法中定义操作(这在模板中是不可能的)?