Искусственная вариация в Visual Studio 2012

Я пытаюсь создать конструктор, который принимает переменное число аргументов, и я бы очень хотел сохранить безопасность типов.
Я гуглил и продолжал находить термин «Faux variadics» (Пример: http://msdn.microsoft.com/en-us/library/hh567368.aspx)
Однако я не могу найти никаких примеров того, как использовать эти Faux variadics, и я хотел бы избежать необходимости искать прямо в исходном файле std :: tuple.

Так кто-нибудь знает относительно простой пример этих искусственных вариаций?

2

Решение

Вы можете использовать библиотеку препроцессора boost для этого:

Простой пример с использованием BOOST_PP_REPEAT:

#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>

#define TINY_print(z, n, data) data

#define TINY_size(z, n, unused)                                 \
template <BOOST_PP_ENUM_PARAMS(n, class T)>                   \
struct tiny_size<                                             \
BOOST_PP_ENUM_PARAMS(n,T)                                 \
BOOST_PP_COMMA_IF(n)                                      \
BOOST_PP_ENUM(                                            \
BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none)      \
>                                                             \
: mpl::int_<n> {};

BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~)

#undef TINY_size
#undef TINY_print
4

Другие решения

Теперь вы также можете использовать ноябрьскую CTP и попробовать их вариационную реализацию шаблонов.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector