documentationは言及:このタイプの発生器はextent_gen::operator[]
からRanges
連鎖呼び出しの結果を指定するために使用され
template gen_type<Ranges>::type
- 。
gen_type
はboost::multi_array_types::extent_gen
のメンバーである
(及びboost::multi_array_types::extent_gen
は、グローバルヘルパーオブジェクトboost::extents
のタイプです)。
エクステントのセットを受け入れるコンストラクタが(少なくともパブリックなドキュメントの目的で)この方法で指定されていることもわかります。 For example、
namespace boost {
template <typename ValueType,
std::size_t NumDims,
typename Allocator = std::allocator<ValueType> >
class multi_array {
...
typedef multi_array_types::extent_gen extent_gen;
...
explicit multi_array(extent_gen::gen_type<NumDims>::type ranges,
const storage_order_type& store = c_storage_order(),
const Allocator& alloc = Allocator());
ですからとしてauto
を使用せずに、あなたのコード行を書き換えることができます:
boost::multi_array_types::extent_gen::gen_type<3>::type my_shape =
boost::extents[3][4][5];
これは少しですローカル変数には愚かですが、クラスにエクステントのセットなどを格納したいことがあります。そうであれば、これは正式に文書化されたインターフェースに従ってそれを行う方法です。
(コメントで述べたように、実際の型は、この型定義はboost::internal::
が関与して解決するが、それは将来のバージョンで変更される場合がありますので、あなたが、あなたのコード内で「内部」名前空間から何かを使用しないでください。)
に記載されていますが好奇心のためにそれを知ってしますか、またはあなたがしたいですかそれで何かをコード化しますか? – Quentin
あなたの場合は、 '' boost :: detail :: multi_array :: extent_gen <3> ''(https://github.com/boostorg/multi_array/blob/83c3738519a442c619f9ef661335acde6878b7d8/include/boost/multi_array/extent_gen.hpp#L28)です。なぜあなたは気にしますか? – Praetorian
@クエンティン両者は少し、実際には。私は、このような 'multi_array'という未知の計算可能なサイズのカップルを必要とするクラスを構築しています。そして、そのような' extent 'をどこかに格納することは、その構築を容易にすると考えました。私がそれを保存すると思っていた方法のどれも(オート以外)働かなかったので、私の好奇心が私に尋ねました! –