首页 > 后端开发 > C++ > C 0x 元编程技术可以用于在编译时以编程方式将值分配给静态数组吗?

C 0x 元编程技术可以用于在编译时以编程方式将值分配给静态数组吗?

Linda Hamilton
发布: 2024-12-05 06:09:10
原创
690 人浏览过

Can C  0x Metaprogramming Techniques be Used to Programmatically Assign Values to Static Arrays at Compile Time?

在 C 编译时以编程方式生成静态数组

鉴于能够在 C 编译时定义静态数组,是否可以使用元编程技术以编程方式分配它们的值?

问题1:数组值的编程赋值

是的,使用C 0x特性,在编译时“以编程方式”初始化数组元素是可行的。考虑以下示例:

template<unsigned... args>
struct ArrayHolder {
    static const unsigned data[sizeof...(args)];
};

template<unsigned... args>
const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
登录后复制

问题 2:数组值的选择性赋值

假设数组包含重复出现的值(但有一些例外),则可以选择性地赋值以编程方式值:

template<size_t N, template<size_t> class F, unsigned... args>
struct generate_array_impl {
    typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};

template<template<size_t> class F, unsigned... args>
struct generate_array_impl<0, F, args...> {
    typedef ArrayHolder<F<0>::value, args...> result;
};

template<size_t N, template<size_t> class F>
struct generate_array {
    typedef typename generate_array_impl<N-1, F>::result result;
};
登录后复制

具有重复零的数组的用法除了元素 2 和 3:

template<size_t index>
struct MetaFunc {
    enum { value = index == 2 || index == 3 ? index + 1 : 0 };
};

void test() {
    const size_t count = 7;
    typedef generate_array<count, MetaFunc>::result A;

    for (size_t i=0; i<count; ++i)
        std::cout << A::data[i] << "\n";
}
登录后复制

虽然这些解决方案受到最大模板实例化深度的限制,但它们展示了 C 0x 在编程数组创建和初始化方面的潜力。

以上是C 0x 元编程技术可以用于在编译时以编程方式将值分配给静态数组吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板