【发布时间】:2017-07-02 07:58:07
【问题描述】:
我正在尝试将 const int 数组的总和作为 constexpr,以便我可以使用 sum 作为另一个数组的大小
constexpr int arr[] = {1, 2, 3};
constexpr int sum1 = std::accumulate(arr, arr + 3, 0); // not OK
int arr1[sum1];
由于std::accumulate() 不返回constexpr,以上内容无法编译。我最终有一个像这样的解决方法
template <size_t N>
constexpr int sum(int const a[])
{
return a[N-1] + sum<N - 1>(a);
}
template <>
constexpr int sum<0>(int const a[])
{
return 0;
}
constexpr int arr[] = {1, 2, 3};
constexpr int sum1 = sum<3>(arr);
int arr1[sum1];
有没有更简单的解决方案?
【问题讨论】:
-
数组是1M个元素的时候会变成1M行代码吗?或者它只是成为一个自我重复的功能?
-
在某些时候,使用代码生成器可能比走这条奇怪的黑客之路更容易。
-
您可以在类模板上下文中实现这一点 (example)。
标签: c++ c++11 templates template-meta-programming constexpr