documentation該提到:
template gen_type<Ranges>::type
- 這種類型的發生器是用來指定的
Ranges
鏈式調用extent_gen::operator[]
結果。
其中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
@Quentin實際上,兩者都不是。我正在構建一個需要一些未知但可計算大小的'multi_array'的類,並且我認爲在某處存儲這樣一個'extent'可能會使它們的構建更容易。我認爲沒有任何方式存儲它(除了'auto'),所以我的好奇心促使我問! –