在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}。