如何通过参数包参数设置std :: array的大小?

时间:2018-11-25 18:10:18

标签: c++ c++11 variadic-templates variadic-functions stdarray

我有一个N维Matrix类,该类具有带有参数包的构造函数。是否可以根据参数包中的值设置std::array成员变量的大小?据我了解,应该在编译时就知道参数包中的值。

template<size_t N>
class Matrix {
public:
    template<typename... Exts>
    Matrix(Exts... exts) : dimSizes{exts...} { }

private:
    std::array<size_t, N> dimSizes;
    std::array<float, N> data;
    // e.g something like this: std::array<float, dimSizes[0]> data;
};

int main(void) {
    Matrix<3> mat(2, 3, 2);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

是否可以根据参数包中的值设置std::array成员变量的大小?

     

//例如:std::array<float, dimSizes[0]> data;

不,据我所知,这完全不可能做到。

因为这样,同一类的不同实例将包含名称相同但类型不同的成员。严格禁止使用强类型语言(如C ++)。

如果您要使用不同大小的std::array,则必须区分类型。因此第二个std::array的尺寸必须是模板参数。

很显然,您可以将std::array替换为与大小无关的容器;正如Piotr Skotnicki所建议的,可能的解决方案是std::vector