使用模板进行序列数组初始化
Sequence array initialization with template
我想用从 0
到 N - 1
的 int
序列初始化一个数组
#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 *
。我怎样才能做到这一点 ?如何 "concatenate" 值 ?
我不确定这是否符合您的要求。
#include <array>
#include <iostream>
template <size_t ...I>
constexpr auto init(std::index_sequence<I...>) {
return std::array<size_t, sizeof...(I)>{I...};
}
int main(void)
{
std::array<size_t, 10> a = init(std::make_index_sequence<10>());
for (int const & i : a)
std::cout << i << "\n";
return 0;
}
我想用从 0
到 N - 1
int
序列初始化一个数组
#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 *
。我怎样才能做到这一点 ?如何 "concatenate" 值 ?
我不确定这是否符合您的要求。
#include <array>
#include <iostream>
template <size_t ...I>
constexpr auto init(std::index_sequence<I...>) {
return std::array<size_t, sizeof...(I)>{I...};
}
int main(void)
{
std::array<size_t, 10> a = init(std::make_index_sequence<10>());
for (int const & i : a)
std::cout << i << "\n";
return 0;
}