【发布时间】:2019-05-06 17:21:20
【问题描述】:
我有一个容器类模板,其中包含几种不同类型的成员。我想传递一个为每个元素调用的函子。我可以用下面的代码做我想做的事:
#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 函数来达到与结构相同的效果?或者至少允许我在调用方法中定义操作(这在模板中是不可能的)?
【问题讨论】:
-
std::function不适合你吗?您可以将 lambda(以及更多)传递给此类。 -
@JesperJuhl 如果您不需要实际存储函数,则模板化参数通常是一个更好的主意。
std::function实现了类型擦除,通常直接使用类型会更好。
标签: c++ templates lambda generic-lambda