Boost MPL - 为序列

时间:2017-09-13 15:35:17

标签: c++ boost

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

1 个答案:

答案 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))