在C
问题中以编译时间创建静态数组的问题介绍
传统上,可以在Compile Time中定义静态数组,大小数组。但是,在某些情况下,希望在编译时以编程方式分配值。本文探讨了元编程技术,以实现静态数组的这种动态创建。
问题1:使用C 0x功能编程分配值
问题2:选择性值分配
可以在编译时选择性分配值,可以使用variadic模板和元函数的组合。 metafunc模板用作基于其索引的一个值序列的参数包。然后,Generate_Array模板可以使用生成的值创建所需大小的数组。
template struct_t index> struct metafunc {enum {num {value = index 1}; };
模板类f>
struct generate_array {
typedef typename generate_array_impl ::结果结果;
};
模板 f类,unsigned ... args>
struct generate_array_impl {
typedef typename generate_array_impl ::结果结果;
};
模板 f类,unsigned ... args>
struct generate_array_impl {
Typedef数组持有人 :: value,args ...>结果;
};
模板结构数组持有人{
静态常量无符号数据[sizeOf ...(args)];
};
模板
const unsigned ArrayHolder::data[sizeof...(args)] = { args... };
Usage Example
void test() {
const size_t count = 5;
typedef generate_array ::结果a;
for(size_t i = 0; i 此示例定义了一个大小5的静态数组,使用metafunc metafunction在编译时间分配的值{1,2,2,3,4,5}。