[英]Template class casting in constructor
可以说我有一个像这样的课程:
template< typename T, int nDimensions = 2 >
class Vec
{
private:
std::array< T, nDimensions > elements_;
}
然后我输入一些不同的类型。
typedef Vec< int, 2 > Vec2i;
typedef Vec< int, 3 > Vec3i;
typedef Vec< float, 2 > Vec2f;
typedef Vec< float, 3 > Vec3f;
如果我想从一种类型转换为另一种类型,构造函数将是什么?
Vec2i something(10,20); //10,20
Vec2f somethingElse(something); //10.0f,20.0f
同样适用于不同的大小:
Vec3f somethingmore(something); //10.0f,20.0f,0.0f
到目前为止,我有:
template<typename F>
Vec(const F& other)
{
for (int i = 0; i < nDimensions; i++)
{
this->elements_[i] = static_cast<F>(other[i]); //I know this is wrong.
}
}
我想不出一种获取其他类的基类型以对每个元素进行静态强制转换的好方法,也找不到一种获取其他nDimension大小的好方法,因此我可以进行适当的边界检查。
如果我想从一种类型转换为另一种类型,构造函数将是什么?
最通用的构造函数是:
template <typename T2, int nDimension2>
Vec(Vec<T2, nDimension2> const& copy) { ... }
这将需要适当的逻辑,以确保您不会使用超出范围的索引来访问内存。
通用性较低的构造函数是:
template <typename T2>
Vec(Vec<T2, nDimension> const& copy) { ... }
在这里,您可以使用std::copy
复制元素。
template <typename T2>
Vec(Vec<T2, nDimension> const& copy) { std::copy(copy.elements_.begin(),
copy.elements_.ennd(),
this->elements_.begin()); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.