Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
是否有一个宏告诉我我的编译器是否支持可变参数模板?
#ifdef VARIADIC_TEMPLATES_AVAILABLE template<typename... Args> void coolstuff(Args&&... args); #else ??? #endif
如果它们不受支持,我想我会用一堆重载来模拟它们。有更好的想法吗?也许有可以减轻工作的预处理器库?
也许:#ifndef BOOST_NO_VARIADIC_TEMPLATES?
#ifndef BOOST_NO_VARIADIC_TEMPLATES
如果不支持可变参数模板,您可能会考虑使用 boost 元组库:
template<typename Tuple> void coolstuff(Tuple&& args);
和:
coolstuff(boost::make_tuple(1, 2, 3));
如果可变参数模板不可用,看起来当前版本的 Boost 定义了 BOOST_NO_VARIADIC_TEMPLATES。这是由提供的boost/config.hpp;有关 config.hpp 文档,请参见此处。
boost/config.hpp
如果可变参数模板不可用,那么您可能必须使用一堆重载来模拟它们,正如您所说。Boost.Preprocessor库可以在这里提供帮助;它旨在自动化各种重复的源代码,包括模板重载。您可以在 Boost 源代码树中搜索 BOOST_NO_VARIADIC_TEMPLATES,以获取有关使用它来模拟可变参数模板的示例。