Как я компилирую шаблоны variadic условно?

Существует ли макрос, который говорит мне, поддерживает ли мой компилятор шаблоны variadic?

#ifdef VARIADIC_TEMPLATES_AVAILABLE

template<typename... Args> void coolstuff(Args&&... args);

#else

???

#endif

Если бы они не поддерживаются, я предполагаю, что моделировал бы их с набором перегрузок. Какие-либо лучшие идеи? Возможно, существуют библиотеки препроцессора, которые могут упростить задание?

7
задан fredoverflow 1 June 2010 в 17:10
поделиться

2 ответа

Похоже, что текущая версия Boost определяет BOOST_NO_VARIADIC_TEMPLATES, если вариативные шаблоны недоступны. Это обеспечивается boost / config.hpp ; см. здесь для документации по config.hpp.

Если вариативные шаблоны недоступны, вам, вероятно, придется смоделировать их с помощью множества перегрузок, как вы сказали. Здесь может помочь библиотека Boost.Preprocessor ; он разработан для автоматизации всех видов повторяющегося исходного кода, включая перегрузки шаблонов. Вы можете выполнить поиск в деревьях источников Boost для BOOST_NO_VARIADIC_TEMPLATES, чтобы найти примеры его использования для моделирования вариативных шаблонов.

7
ответ дан 6 December 2019 в 14:00
поделиться

Возможно: #ifndef BOOST_NO_VARIADIC_TEMPLATES ?


Если вариативные шаблоны не поддерживаются, вы можете подумать об использовании библиотеки ускоряющих кортежей:

template<typename Tuple> void coolstuff(Tuple&& args);

И:

coolstuff(boost::make_tuple(1, 2, 3));
8
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: