我写了一些代码来生成一个 boost::mpl::vector
用作阶乘函数的查找表,作为对开发人员可能使用的更通用的库函数的测试能够以静态基元数组的形式生成查找表。该函数(最有可能实现为预处理器宏定义)将接受要初始化的数组的名称和大小,以及用作初始化每个元素的元函数的类模板的名称 i 的数组。
我认为在不使用外部脚本的情况下执行此操作的最佳方法是
- 创建一个
boost::mpl::vector
,如下面的代码 list 所示,并将数组中每个元素的用户提供的元函数的返回值推送到 vector ; - 使用 vector 的元素初始化静态数组(可能通过使用一系列宏,最后一个宏将使用
__VARARGS__
宏来完成此操作)。
我既不知道我将如何完成 (2),也不知道我描述的过程是否是完成我所寻求的事情的好方法。以下是我希望得到解答的以下问题:
我的程序是否是实现我所寻求目标的好方法?如果没有,请描述一个更好的过程,它可以在不使用外部脚本的情况下完成同样的事情。
如果我的程序确实是实现我所寻求目标的好方法,我将如何实现 (2)?
一旦我实现它,我一定会发布一个包含库函数的源文件的链接。代码 list 如下。
命名空间 mpl = boost::mpl;
template <typename x> struct factorial: mpl::if_<mpl::greater<x, mpl::int_<1>>, mpl::multiplies<x, factorial<x::prior>>, mpl::int_<1> >::type {}; template <typename sequence, typename size> struct compileTable: mpl::if_<mpl::greater<size, mpl::int_<0>>, compileTable< mpl::push_front<sequence, factorial<size>>::type, size::prior >, sequence >::type {}; static const int TABLE_SIZE = 13; typedef compileTable< mpl::vector<>, mpl::int_<TABLE_SIZE> >::type factorialTable; /* ** This is where I am stuck; how would I use the elements ** of factorialTable to initialize a static array? */
最佳答案
http://www.boost.org/doc/libs/1_46_0/libs/preprocessor/doc/index.html
#define MACRO(z, i, data) \
mpl::at_c<data,i>::value
static const data[] = { BOOST_PP_ENUM(N, MACRO, factorialTable) };
关于c++ - 将 MPL vector 转换为静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112598/