如何有条件地编译可变参数模板?

fre*_*low 7 c++ templates variadic c++11

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

#ifdef VARIADIC_TEMPLATES_AVAILABLE

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

#else

???

#endif
Run Code Online (Sandbox Code Playgroud)

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

Kar*_*oor 8

也许:#ifndef BOOST_NO_VARIADIC_TEMPLATES


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

template<typename Tuple> void coolstuff(Tuple&& args);
Run Code Online (Sandbox Code Playgroud)

和:

coolstuff(boost::make_tuple(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)


Jos*_*ley 7

如果可变参数模板不可用,则当前版本的Boost定义BOOST_NO_VARIADIC_TEMPLATES.这是由boost/config.hpp; 请参阅此处获取config.hpp文档.

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