c++ - 如何通过参数包参数设置 std::array 大小?

标签 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;
}

最佳答案

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;

不,据我所知,完全按照你的想法是不可能的。

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

如果你想要一个std::array尺寸不同,你必须区分类型;所以第二个维度 std::array必须是模板参数。

显然您可以用 std::array 代替使用不依赖于大小的容器;正如 Piotr Skotnicki 所建议的,一个可能的解决方案是 std::vector

关于c++ - 如何通过参数包参数设置 std::array 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470411/

相关文章:

c++ - OLEDB - C++ - ATL 的 OLEDB 提供程序示例使 Excel 崩溃(来自 msado15.dll 的未捕获异常)

c++ - 在 opencv 中使用文件存储

c++ - 如果在互斥锁下没有修改共享原子变量,则无法正确发布

c++ - 使用 `std::string::c_str()` 将 `mkdtemp()` 的结果传递给 `const_cast<char*>()`

c++ - 我怎样才能避免这段代码中的 void 赋值?

c++ - 多个派生类的 dynamic_cast

c++ - 用于创建字符串的 Variadic 模板函数

c++ - 为什么 sizeof...(T) 这么慢?在没有 sizeof...(T) 的情况下实现 C++14 make_index_sequence

c++ - 为什么使用 std::function 回调的可变模板参数推导模板参数失败?

c++ - OpenMP 的理想数据结构