:C++ 14では
std::array < float, (... * N_i)> arr;
:
C++ 11では
// outside the class
template<size_t... Ns>
constexpr size_t product(){
size_t p = 1;
for(auto n : { Ns... }) p *= n;
return p;
}
// then
std::array< float, product<N_i...>()> arr;
:
また
template<size_t... N_i>
struct product {
static const size_t value = 1;
};
template<size_t N_1, size_t... N_i>
struct product<N_1, N_i...> {
static const size_t value = N_1 * product<N_i...>::value;
};
std::array< float, product<N_i...>::value> arr;
、あなたは再帰を使用することができますconstexpr
機能。
template<typename ...Args>
constexpr int multiply(Args&&... args)
{
return (args * ...);
}
それはC++ 17倍の式を使用し、の再帰的定義を行うことができます
template< size_t... N_i >
class A
{
// ...
std::array< float, multiply(N_i ...) > arr;
};
...ここでは、上の答えで 'C++ 'の進化を見ることができます。 – bolov