gpt4 book ai didi

c++ - 将 MPL vector 转换为静态数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:47 26 4
gpt4 key购买 nike

我写了一些代码来生成一个 boost::mpl::vector 用作阶乘函数的查找表,作为对开发人员可能使用的更通用的库函数的测试能够以静态基元数组的形式生成查找表。该函数(最有可能实现为预处理器宏定义)将接受要初始化的数组的名称和大小,以及用作初始化每个元素的元函数的类模板的名称 i 的数组。

我认为在不使用外部脚本的情况下执行此操作的最佳方法是

  1. 创建一个 boost::mpl::vector,如下面的代码 list 所示,并将数组中每个元素的用户提供的元函数的返回值推送到 vector ;
  2. 使用 vector 的元素初始化静态数组(可能通过使用一系列宏,最后一个宏将使用 __VARARGS__ 宏来完成此操作)。

我既不知道我将如何完成 (2),也不知道我描述的过程是否是完成我所寻求的事情的好方法。以下是我希望得到解答的以下问题:

  1. 我的程序是否是实现我所寻求目标的好方法?如果没有,请描述一个更好的过程,它可以在不使用外部脚本的情况下完成同样的事情。

  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/

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