Общий посетитель с использованием шаблонов - PullRequest
2 голосов
/ 28 июня 2011

У меня есть небольшой код ниже:

#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 ]

0 голосов
/ 11 июля 2011

Я много об этом писал в своем блоге, я играл с ним в течение дня или двух, если вам нужно больше, я могу опубликовать свой код: Variadic Template Treatise

0 голосов
/ 28 июня 2011

Этот ответ может помочь вам при применении функции к пакету параметров.

Как расширить кортеж в аргументы функции-шаблона?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...