У меня есть шаблон класса контейнера, содержащий члены нескольких различных типов.Я хотел бы передать функтор, который вызывается для каждого из элементов.Я могу делать то, что хочу, с помощью следующего кода:
#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()
работает, мне не хватает комфорта, который мы имеем при определении лямбда-функции.Есть ли способ использовать лямбда-функции для достижения того же эффекта, что и в структуре?Или хотя бы то, что позволяет мне определить операцию внутри вызывающего метода (что невозможно с шаблонами)?