Boost MPL-按顺序声明每种类型的类



我有一个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))

最新更新