Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何有条件地编译可变模板?_C++_Templates_C++11_Variadic - Fatal编程技术网

C++ 如何有条件地编译可变模板?

C++ 如何有条件地编译可变模板?,c++,templates,c++11,variadic,C++,Templates,C++11,Variadic,是否有宏告诉我编译器是否支持可变模板 #ifdef VARIADIC_TEMPLATES_AVAILABLE template<typename... Args> void coolstuff(Args&&... args); #else ??? #endif \ifdef可变模板\u可用 模板无效coolstuff(参数&&…参数); #否则 ??? #恩迪夫 如果它们不受支持,我想我会用一堆重载来模拟它们。还有更好的主意吗?也许有一些预处理器库可以简化

是否有宏告诉我编译器是否支持可变模板

#ifdef VARIADIC_TEMPLATES_AVAILABLE

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

#else

???

#endif
\ifdef可变模板\u可用
模板无效coolstuff(参数&&…参数);
#否则
???
#恩迪夫
如果它们不受支持,我想我会用一堆重载来模拟它们。还有更好的主意吗?也许有一些预处理器库可以简化工作?

也许:
\ifndef BOOST\u NO\u VARIADIC\u模板


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

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

如果可变模板不可用,Boost的当前版本似乎定义了Boost\u NO\u可变模板。这是由
boost/config.hpp
提供的;有关config.hpp文档,请参阅


如果变量模板不可用,那么您可能必须用一堆重载来模拟它们,正如您所说的。图书馆可以在这里提供帮助;它的设计目的是自动化各种重复的源代码,包括模板重载。您可以在Boost源代码树中搜索Boost_NO_VARIADIC_模板,以获取使用它来模拟可变模板的示例。

我会将您的方法与Niels结合起来:由于Boost.Preprocessor将参数包装到一个
Boost.Fusion
容器中,因此提出了一个具有多种算术重载的接口(元组、向量等),然后传递给单个模板类,期望在其中完成实际实现。其目的只是减少宏中的代码量以简化调试:)
coolstuff(boost::make_tuple(1, 2, 3));