コンパイル時にサイズが既にわかっているので、私は3次元std::array
を使用します。しかし、size()関数は静的ではなく、constexpr/template関数ではアクセスできないことに気付きました。constexprまたはテンプレート関数を介してコンパイル時に多次元std :: arrayのサイズを取得します
私はすでに1次元のサイズを推定するデモの例を見つけましたstd::array
。ただし、これは2つ以上のディメンションでは機能しません。 x, y, z, ..
ディメンションのテンプレートパラメータdim
を追加して関数を記述して、他のディメンションを返す方法はありますか? 1次元の場合については
// Example program
#include <iostream>
#include <string>
#include <array>
// typedefs for certain container classes
template<class T, size_t x>
using array1D = std::array<T, x>;
template<class T, size_t x, size_t y>
using array2D = std::array<std::array<T, y>, x>;
template<class T, size_t x, size_t y, size_t z>
using array3D = std::array<std::array<std::array<T, z>, y>, x>;
template<class T, std::size_t N>
auto array_size_helper(const array1D<T, N>&) -> std::integral_constant<std::size_t, N>;
template<class Array>
using array_size = decltype(array_size_helper(std::declval<const Array&>()));
template<class Array>
constexpr auto static_size() -> decltype(array_size<Array>::value) {
return array_size<Array>::value;
}
template<class Array>
constexpr auto static_size(Array const&) -> decltype(static_size<Array>()) {
return static_size<Array>();
}
int main()
{
std::cout << static_size<array3D<float, 3, 4, 5>>();
}
'array3D <フロート、3、4、5>で'サイズは何でしょうか? '3'? '4'? '5'?または '3 * 4 * 5'? –
一定のサイズを提供しています。なぜあなたは個々のサイズを掛け合わせて合計サイズを得ることができませんか? –
私の例では、私はちょうどXの次元を取得します:3.他の2つは含まれていません:/ – dgrat