私の質問は、以前に一次元配列について尋ねた質問を参照しています。
この例のように、誰かがインデックストリックの使用を多次元配列に拡張するのを手伝ってくれますか?
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
異なります(例のように)。