是否有一个宏可以告诉我我的编译器是否支持可变参数模板?
#ifdef VARIADIC_TEMPLATES_AVAILABLE
template<typename... Args> void coolstuff(Args&&... args);
#else
???
#endif
如果它们不受支持,我想我会用一堆重载来模拟它们。有什么更好的想法吗?也许有预处理器库可以简化工作?
最佳答案
如果可变参数模板不可用,看起来当前版本的 Boost 定义了 BOOST_NO_VARIADIC_TEMPLATES。这是由 boost/config.hpp
提供的;有关 config.hpp 文档,请参阅 here。
如果可变参数模板不可用,那么您可能必须用一堆重载来模拟它们,正如您所说。 Boost.Preprocessor 库可以在这里提供帮助;它旨在自动化各种重复的源代码,包括模板重载。您可以在 BOOST_NO_VARIADIC_TEMPLATES 的 Boost 源树中搜索使用它来模拟可变参数模板的示例。
关于c++ - 如何有条件地编译可变参数模板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2951780/