我有一个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向量生成这些行?
我怀疑这是不可能的,所以我的后卫:有没有办法让预处理器为我做到这一点?因此,是否有任何(增强的)宏可以以某种方式循环序列(如果我必须使用一些特殊的语法来定义我的序列,那很好),以便我可以用预处理字符串中的类型名称做某事?<<<<<<<</p>
我恐怕您不能作为模板扩展而做到这一点,但是您可以使用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))