【发布时间】:2015-05-20 23:53:39
【问题描述】:
我尝试像使用其他模板一样使用变量模板,例如:我们已经知道如何使用带有template objects wrapping a static value or a enum value 的元编程来计算Fibonacci number 或power of a number。
所以,我做的第一件事是尝试专门化一个模板变量,它按预期工作:
template <std::size_t VALUE> std::size_t value = VALUE;
template <> std::size_t value<666u> = 1u;
std::cout << value<0u> << '\n'; // "0" as expected
std::cout << value<1u> << '\n'; // "1" as expected
std::cout << value<2u> << '\n'; // "2" as expected
std::cout << value<666u> << '\n'; // "1" as expected!!
知道变量模板特化是可能的,我尝试做一个变量模板斐波那契数:
template <std::size_t ITERATION>
std::size_t fibonacci = fibonacci<ITERATION - 1u> + fibonacci<ITERATION - 2u>;
template <> std::size_t fibonacci<1u> = 1u;
template <> std::size_t fibonacci<0u> = 0u;
int main()
{
std::cout << fibonacci<5> << '\n'; // "8" expected;
return 0;
}
我从Wandbox 得到的错误如下:
error: expected primary-expression before ';' token
template <std::size_t ITERATION> std::size_t fibonacci = fibonacci<ITERATION - 1u> + fibonacci<ITERATION - 2u>;
^
我不知道自己做错了什么,也不理解错误。我猜这个错误可能与我已经在使用它时尚未定义变量模板这一事实有关,所以我想知道是否有可能使用变量模板实现我的目标。
有什么提示吗?
非常感谢。
【问题讨论】:
标签: c++ templates c++14 variable-templates