[問題] compile time array initialization?

看板C_and_CPP (C/C++)作者 (のヮの)時間11年前 (2014/11/11 17:24), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串1/2 (看更多)
大家好 有些簡單而且固定的運算,我想透過 template 遞迴在編譯期算出值,例如 template<unsigned int N> struct PowerOfTen { static_assert(N < 20U, "Too large"); constexpr static const unsigned long long value = 10ULL * PowerOfTen<N - 1U>::value; }; template<> struct PowerOfTen<0U> { constexpr static const unsigned long long value = 1ULL; }; 但是執行期我需要透過變數來取得這些值,例如 for (unsigned int i = 2; i < 7; ++i) { std::cout << PowerOfTen<i>::value; // error } 所以我是不是該建立一張表存放這些值,使用時會像 for (unsigned int i = 2; i < 7; ++i) { std::cout << PowerOfTenTable::value[i]; } 我想到的方法大概是 template<unsigned int N> const unsigned long long PowerOfTen<N>::value = init() { static const unsigned long long val = 10ULL * PowerOfTen<N - 1>::value; PowerOfTenTable::value[N] = val; return val; } 這我沒有實際編譯並執行過所以不曉得對不對 因為我覺得這樣寫就變成在模組載入時建表而非編譯期,仍然會占用執行時間 不曉得我的觀念是否正確,並且想請問有無解法 另外是不是可以用 variadic template 達到這個效果 只不過我跟 variadic template 實在不熟,希望有大大可以指點 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.22.50 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1415697885.A.687.html

11/12 00:42, , 2F
我比較推用boost.preprocessor做
11/12 00:42, 2F

11/12 00:46, , 3F
boost會幫處理掉噁心的實作細節, 讓自己的code看起來
11/12 00:46, 3F

11/12 00:46, , 4F
比較乾淨 XD
11/12 00:46, 4F

11/12 14:57, , 5F
自己做過之後真的滿醜的... XD
11/12 14:57, 5F

11/13 09:46, , 6F
偶爾(只是偶爾)我會想直接放magic number會不會更有效率
11/13 09:46, 6F
文章代碼(AID): #1KOTNTQ7 (C_and_CPP)
文章代碼(AID): #1KOTNTQ7 (C_and_CPP)