Списки переменных аргументов с повышением?
Я хотел написать функцию со списком переменных аргументов. Я хочу изучить свои возможности. Я почти уверен, что я пришел через класс шаблона boost, который был разработан для этой цели, но я не могу вспомнить его название? Кто-нибудь может мне сказать? или мне все это приснилось? Спасибо
1 ответ:
Если вам нужно только принять переменное количество аргументов одного и того же типа, то взять контейнер было бы обычным делом. Создание контейнера, однако, может быть облегчено с помощью Boost.Назначить :
void f(const std::vector<int>& vec) {} f(boost::assign::list_of(1)(2)(3)(4));
В качестве альтернативы вы можете перейти к перегрузке операторов (например,
operator()
илиoperator<<
) самостоятельно, аналогично подходу, используемому стандартными библиотечными потоками:op() << arg1 << arg2 << arg3;
Если вы действительно хотите, чтобы обеспечить тип-безопасная функция с переменным числом аргументов (без использования C++0х особенности), повышение.Препроцессор может помочь. Общий пример:
#define OUT(z, n, name) << name ## n #define MAKE_FUNC(z, n, unused) \ template<class T BOOST_PP_ENUM_TRAILING_PARAMS(n, class T)> \ void func(T t BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(n, T, t) ) { \ std::cout << t BOOST_PP_REPEAT(n, OUT, t) << std::endl; \ } BOOST_PP_REPEAT(9, MAKE_FUNC, ~) // generates func() versions taking 1-10 arguments func(1, "ab", 'c'); // prints "1abc"