【发布时间】:2016-05-18 10:48:31
【问题描述】:
我想用从0 到N - 1 的ints 序列初始化一个数组
#include <array>
#include <iostream>
template<unsigned N>
struct XArray
{
static constexpr int array[N] = {XArray<N - 1>::array, N - 1};
};
template<>
struct XArray<1>
{
static constexpr int array[1] = {0};
};
int main(void)
{
std::array<int, 10> const a{XArray<10>::array};
for (int const & i : a)
std::cout << i << "\n";
return 0;
}
我试过了,但它不起作用,因为我的结构中的XArray<N - 1>::array 必须是int,而不是int *。我怎样才能做到这一点 ?如何“连接”这些值?
【问题讨论】:
-
这并不容易。该语言缺少“包值”功能。有(半开玩笑的)提议允许在某些时候重载
operator...,但目前该语言中不存在任何内容。 (例如,您想要的是int array[N] = { unpack<N>()... };,其中unpack有一个重载的operator...。) -
@KerrekSB Ow... :( 没办法做到这一点,所以?
-
我只有一个字:为什么
-
换句话说,我不清楚您是专门尝试完成这项工作,还是您只是不知道通常是如何完成的。
-
我读过一些关于它是如何完成的东西,但它对我来说太复杂了(当我尝试这样做时它永远不会起作用)。
标签: c++ templates c++11 metaprogramming