T[][][]
構文を使用して多次元配列を定義するのは簡単です。しかし、これは現代のC++にうまく収まらない生の配列型を作成します。だからこそ、C++ 11以降、std::array
があるのです。しかし、std::array
を使用して多次元配列を定義する構文は非常に面倒です。たとえば、3次元のint
配列を定義するには、std::array<std::array<std::array<int, 5>, 5>, 5>
と記述する必要があります。構文はまったくスケールされません。私はこの問題の修正を求めています。たぶん、この問題は、C++で提供されている既存のユーティリティを使って修正することはできません。その場合、構文を簡単にするために開発されたカスタムツールがうれしいです。実装がさらに簡素化することができるかどうかを疑問に思う最新のC++で多次元配列をエレガントに定義
template <typename T, std::size_t n, std::size_t... ns>
struct multi_array {
using type = std::array<typename multi_array<T, ns...>::type, n>;
};
template <typename T, std::size_t n>
struct multi_array<T, n> {
using type = std::array<T, n>;
};
template <typename T, std::size_t... ns>
using multi_array_t = typename multi_array<T, ns...>::type;
:
はsolution自分自身を発見しました。
[Boost.ultiArray] –
@AngryLettuce私はそれがこのような単純な問題には少し重すぎると思う。私はこれのためだけにBoost全体を引っ張ってはいけません。 – Lingxi
'typedef'は受け入れられません:' typedef std :: array> threeD; '..' threeD arr; arr [0] [0] [0] ... '?この例は、明らかに異なるタイプを許可するように変更する必要がありますが、それが役立つかどうか不思議ですか? –
txtechhelp