【发布时间】:2013-09-23 19:09:43
【问题描述】:
我正在尝试通过模板在编译时对静态数组的元素求和:
#include <type_traits>
template<size_t idx, int* arr>
struct static_accumulate :
std::integral_constant<size_t, arr[idx] + static_accumulate<idx - 1, arr>::value>
{ };
template<int* arr>
struct static_accumulate<0, arr> : std::integral_constant<size_t, arr[0]>
{ };
constexpr int arr[9] = {1, 2, 3,
4, 5, 6,
7, 8, 9};
int main()
{
std::cout<<static_accumulate<8, arr>::value;
}
但我得到了这个编译错误:
错误:无法将模板参数“arr”转换为“int*”
编译器 - gcc 4.7.
如何避免?
【问题讨论】:
-
您可能只想看看 constexpr 与 C++11。
标签: c++ arrays c++11 metaprogramming