[問題] compile time array initialization?
大家好
有些簡單而且固定的運算,我想透過 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/11 18:12, , 1F
11/11 18:12, 1F
推
11/12 00:42, , 2F
11/12 00:42, 2F
推
11/12 00:46, , 3F
11/12 00:46, 3F
→
11/12 00:46, , 4F
11/12 00:46, 4F
→
11/12 14:57, , 5F
11/12 14:57, 5F
推
11/13 09:46, , 6F
11/13 09:46, 6F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章