对于我想从事的小型软件渲染器项目,我需要不同类型的 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::array
和 std::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/