Общий посетитель с использованием шаблонов
У меня есть небольшой код ниже:
#include <iostream>
#include <boost/variant.hpp>
#include <functional>
struct Test
{
void one() const { std::cout << "one\n"; }
void two(int i) const { std::cout << "two\n"; }
};
struct TestVisitor : public boost::static_visitor<>
{
template<class ... Args>
void operator()( const std::function<void (Args...)>& func) const
{
//func(args...);
}
};
int main()
{
Test test;
std::function<void ()> f = std::bind(&Test::one, &test);
typedef boost::variant< std::function<void ()>, std::function<void (int)> > fvariant;
fvariant var = f;
boost::apply_visitor( TestVisitor(), var );
return 0;
}
Было бы неплохо вызвать объект функции "func" с переменным количеством аргументов (закомментированная строка). Знаете ли вы самый простой способ реализовать это?
РЕДАКТИРОВАТЬ: TestVisitor не является окончательным. Не стесняйтесь изменять его, чтобы применить пакет параметров Args... к вызову std:: function.
2 ответа
Этот ответ может помочь вам применить функцию к пакету параметров
Как развернуть кортеж в аргументы функции шаблона переменной?
Я много об этом писал в своем блоге, я играл с ним в течение дня или двух, если вам нужно больше, я могу опубликовать свой код: Variadic Template Treatise