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

标签 c++ templates c-preprocessor metaprogramming boost-mpl

我写了一些代码来生成一个 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/

相关文章:

c++ - cmake:我必须按什么顺序指定 TARGET_LINK_LIBRARIES

c++ - 在 MPI 中逐元素求和和收集数组元素

c++ - 我应该如何在 ATL 项目中创建类?

visual-studio - 我可以在Visual Studio项目模板中创建 "Solution"级别的项目吗?

python - 有没有办法将字典解压到 f 字符串 **模板** 中?

c++ - 访问结构的 union 成员的优雅方式

c++ - Qt - 使用预处理器指令检查 Windows 上链接的 .lib 的可用性

c++ - 使用 std :ofstream 时将内容拷贝检查到文件中

c# - 仅返回类型不同的 C++ 多个接口(interface)?

c++ - 将 defined(X) 返回为 true 或 false 的宏