如何通过参数包参数设置 std::array 大小?
How to set std::array size via parameter pack arguments?
我有一个 N 维矩阵 class,它有一个带有参数包的构造函数。是否可以根据参数包中的值来设置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;
}
Is it possible to set the size of the std::array
member variable depending on the values in the parameter pack?
// e.g something like this: std::array<float, dimSizes[0]> data;
不,据我所知是不可能的。
因为这样,相同 class 的不同实例将包含名称相同但类型不同的成员。严格禁止在 C++ 等强类型语言中使用。
如果你想要一个std::array
不同大小的,你必须区分类型;所以第二个 std::array
的维度必须是模板参数。
显然,您可以用不依赖于大小的容器替换 std::array
;正如 Piotr Skotnicki 所建议的,一个可能的解决方案是 std::vector
我有一个 N 维矩阵 class,它有一个带有参数包的构造函数。是否可以根据参数包中的值来设置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;
}
Is it possible to set the size of the
std::array
member variable depending on the values in the parameter pack?// e.g something like this:
std::array<float, dimSizes[0]> data;
不,据我所知是不可能的。
因为这样,相同 class 的不同实例将包含名称相同但类型不同的成员。严格禁止在 C++ 等强类型语言中使用。
如果你想要一个std::array
不同大小的,你必须区分类型;所以第二个 std::array
的维度必须是模板参数。
显然,您可以用不依赖于大小的容器替换 std::array
;正如 Piotr Skotnicki 所建议的,一个可能的解决方案是 std::vector