gpt4 book ai didi

c++ - Boost MPL - 为序列中的每种类型声明一个类

转载 作者:行者123 更新时间:2023-11-28 05:00:18 31 4
gpt4 key购买 nike

我有一个像这样的 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 vector 中生成这些行?

我怀疑这是不可能的,所以我的回退:有没有办法让预处理器为我做这件事?那么,是否有任何( boost )宏会以某种方式遍历序列中的元素(如果我必须使用一些特殊语法来定义我的序列就没问题)以便我可以对预处理器字符串中的类型名称做一些事情?

最佳答案

恐怕您不能将其作为模板扩展来执行此操作,但您可以使用 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))

关于c++ - Boost MPL - 为序列中的每种类型声明一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201568/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com