我有一个boost :: mpl这样的序列:
typedef boost::mpl::vector<
char, unsigned char, short, unsigned short, int, unsigned int, float, double
> TTypes;
我有一个特定用途的容器类,我想从我的dll导出:
template<typename T>
class Container { T* _elements; }
现在我在标题(MSVC编译器)中需要的是这样的几行:
template class __declspec(dllexport) Container<char>;
template class __declspec(dllexport) Container<short>;
依此类推(我需要相同的东西,但dllimport要包含此库的客户端)。
现在我的问题是,有没有办法从我的mpl矢量生成这些行?
我怀疑这是不可能的,所以我的后备:有没有办法让预处理器为我做这个?那么,是否有任何(boost)宏以某种方式循环遍历Sequence中的元素(如果我必须使用一些特殊的语法来定义我的Sequence,那就好了)这样我就可以对预处理器字符串中的类型名做些什么呢? / p>
答案 0 :(得分:1)
我担心你不能在模板扩展中做到这一点,但是你可以用boost预处理器干净利落地做到这一点。
#include <boost/preprocessor.hpp>
/*
* define the variants as a tuple
*/
#define VARIANTS (char, unsigned char, short, unsigned short, int, unsigned int, float, double)
/*
* our enumeration function which defines an export
*/
#define MAKE_EXPORT(r, data, elem) template class __declspec(dllexport) Container<elem>;
/*
* enumerate cast the tuple to a sequence and enumerate, calling MAKE_EXPORT once for each enumeration
*/
BOOST_PP_SEQ_FOR_EACH(MAKE_EXPORT, _, BOOST_PP_TUPLE_TO_SEQ(VARIANTS))