7

是否有一个宏告诉我我的编译器是否支持可变参数模板?

#ifdef VARIADIC_TEMPLATES_AVAILABLE

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

#else

???

#endif

如果它们不受支持,我想我会用一堆重载来模拟它们。有更好的想法吗?也许有可以减轻工作的预处理器库?

4

2 回答 2

8

也许:#ifndef BOOST_NO_VARIADIC_TEMPLATES


如果不支持可变参数模板,您可能会考虑使用 boost 元组库:

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

和:

coolstuff(boost::make_tuple(1, 2, 3));
于 2010-06-01T17:24:10.157 回答
7

如果可变参数模板不可用,看起来当前版本的 Boost 定义了 BOOST_NO_VARIADIC_TEMPLATES。这是由提供的boost/config.hpp;有关 config.hpp 文档,请参见此处

如果可变参数模板不可用,那么您可能必须使用一堆重载来模拟它们,正如您所说。Boost.Preprocessor库可以在这里提供帮助它旨在自动化各种重复的源代码,包括模板重载。您可以在 Boost 源代码树中搜索 BOOST_NO_VARIADIC_TEMPLATES,以获取有关使用它来模拟可变参数模板的示例。

于 2010-06-01T17:33:44.410 回答