我的问题是指我之前针对一维数组提出的问题:
有人可以帮我将索引技巧的使用扩展到多维数组,例如在这个例子中:
template<unsigned...> struct indices
{
};
template<unsigned M, unsigned... Is> struct indices_gen
: indices_gen<M - 1, M - 1, Is...>
{
};
template<unsigned... Is> struct indices_gen<0, Is...> : indices<Is...>
{
};
template <typename T>
struct example
{
template<typename ...U, typename
= typename std::enable_if<all_of<std::is_same<U, T>...>::value>::type>
example(U... args)
{
static_assert(3 * 2 == sizeof...(U),
"wrong number of arguments in assignment");
assign(indices_gen<M * N>(), args...);
}
template<size_type... Is, class... U>
void assign(indices<Is...>, U... args)
{
[](...){}(((&array[0][0])[Is] = args)...);
}
T array[3][2];
};
int main()
{
example<int> ex(1, 2, 3, 4, 5, 6);
return 0;
}
目前我取决于要求,即数组是连续的,但我想array
使用成对的索引进行分配,而不仅仅是一个索引(这样我就可以支持数组以外的类型,特别是覆盖的类型operator[]
)。如果我使用 2 个参数包进行赋值,我将只在索引 (0, 0)、(1, 1)、... 处进行赋值,当array
不同(如示例中所示)。