在編譯時以程式設計方式建立靜態陣列
在 C 中,靜態陣列可以在編譯時初始化以保存特定值。考慮以下範例:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
問題 1:以程式設計方式分配值
是否可以在編譯時使用元程式設計技術以程式設計方式分配這些值時間?
答案:
使用 C 0x 功能,可以建立模板的本地數組或成員數組,並從可變參數模板參數列表中初始化它們。然而,這受到最大模板實例化深度的限制,對於大型數組可能不實用。
問題2:選擇性賦值
假設某些陣列元素應該具有相同的值,而其他值不同,可以在編譯時以程式設計方式執行選擇性賦值時間?
答案:
使用模板元函數,可以建立一個值數組並使用它來部分初始化靜態數組。以下範例根據索引選擇性地分配值:
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const std::size_t size = 7; typedef generate_array<size, MetaFunc>::result A; for (std::size_t i=0; i<size; ++i) { if (i <= 1 || i >= 4) { A::data[i] = 0; } } }
透過利用模板元函數,可以以程式設計方式實現選擇性分配,同時確保編譯時評估。
以上是C 中的靜態陣列可以在編譯時以程式方式初始化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!