模板化vector(数学类型)的构造函数
Constructor of a templated vector(math kind)
对于一个小的软件渲染器项目,我想我需要不同类型的矢量,所以我想我将它们模板化。
template<typename T, size_t dim> struct Vector {
std::array<T, dim> data;
Vector(){
data = { 0 };
}
}
对于像
这样的空向量可以很好地工作: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})
的语法看起来也有点笨拙。
您可以使用variadic模板:
template <typename ... Ts>
Vector(Ts&&... args) : data{{std::forward<Ts>(args)...}}
{}
可能会有一些SFINAE限制这个构造函数的args数量,并且args可转换为t
它不能与std::initializer_list
一起工作,但它可以与std::array
代理:
#include <array>
#include <iostream>
template<typename T, size_t dim> struct Vector {
std::array<T, dim> data;
Vector(){
data = { 0 };
}
Vector(std::array<T, dim> initial_values) : data(initial_values) {}
};
int main() {
Vector<int, 3> v({1, 2, 3});
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 构造函数正在调用一个使用当前类类型的函数
- 如何修复函数样式强制转换或类型构造的预期"("?
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 不命名构造函数和析构函数上的类型错误
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 初始化自定义类型构造函数的数组
- OpenGL着色器错误C1068:类型构造函数中的数据过多
- Lambda 闭包类型构造函数
- 仅当基础类型具有模板类型构造函数时,才实现这些构造函数
- 模板类的构造函数在使用 new 关键字时调用类型构造函数
- 如何强制函数参数为相同类型,并且不允许使用类型构造函数与给定类型匹配
- 模板类型构造函数参数
- 它们是c++中的类型构造函数
- 解析C++类型构造函数