c++ - 模板化 vector 的构造函数(数学类)

标签 c++

对于我想从事的小型软件渲染器项目,我需要不同类型的 vector ,所以我想我应该将它们模板化。

template<typename T, size_t dim> struct Vector {
  std::array<T, dim> data;

  Vector(){
    data = { 0 };
  }
}

这适用于空 vector ,例如:

Vector<int, 3> v;

但是我怎样才能创建一个构造函数来接受这样的语法:

Vector<int, 3> v(1, 2, 3);

认为 std::initializer_list 可以像这样工作:

Vector(std::initializer_list<T> values){
  data = values;
}
Vector<int, 3> v({1, 2, 3});

但是编译器说在 std::arraystd::initializer_list({1, 2, 3}) 语法看起来也有点笨拙。

最佳答案

您可以使用可变参数模板:

template <typename ... Ts>
Vector(Ts&&... args) : data{{std::forward<Ts>(args)...}}
{}

可能有一些 SFINAE 将此构造函数限制为大量 args,并且 args 可转换为 T。

关于c++ - 模板化 vector 的构造函数(数学类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901102/

相关文章:

c++ - 扭曲的位图文件

c++ - 为 map vector 容器的元素赋值时发生访问冲突

c++ - STM32 LWIP PPPos 实现

c++ - 参数列表中char[N]和char(&)[N]的区别

c++ - Qt 中的小数类型 (C++)

c++ - 如何使用 Win32 以编程方式创建快捷方式

c++ - Rtmidi 开放端口?

C++ 比较器不工作

C++ 对象相等

c++ - 使用 FFmpeg 进行 MPEG 反向帧解码