[英]How to declare conversions between different types of a templated class
我有一個模板化的幾何向量類。 這是它的簡化版本。
template<class T>
class Vec3 {
public:
Vec3(const T& x, const T& y, const T& z) {
m_v[0] = x;
m_v[1] = y;
m_v[2] = z;
}
T m_v[3];
};
我使用此類的雙版本和浮動版本。
using Vec3D = Vec3<double>;
using Vec3F = Vec3<float>;
我想補充的是從浮點版本到雙版本的隱式轉換。 最好的方法是什么?
您可以添加模板構造函數(可能使用 SFINAE):
template<class T>
class Vec3 {
public:
Vec3(const T& x, const T& y, const T& z) {
m_v[0] = x;
m_v[1] = y;
m_v[2] = z;
}
// It is not a copy constructor.
template <typename U>
Vec3(const Vec3<U>& rhs) {
m_v[0] = rhs.m_m_v[0];
m_v[1] = rhs.m_m_v[1];
m_v[2] = rhs.m_m_v[2];
}
T m_v[3];
};
如果您只想將 float 處理為 double,在 C++20 中,您可以使用requires
來“丟棄”方法:
template<class T>
class Vec3 {
public:
Vec3(const T& x, const T& y, const T& z) {
m_v[0] = x;
m_v[1] = y;
m_v[2] = z;
}
Vec3(const Vec3<float>& rhs) requires (std::is_same_v<double, T>) {
m_v[0] = rhs.m_m_v[0];
m_v[1] = rhs.m_m_v[1];
m_v[2] = rhs.m_m_v[2];
}
T m_v[3];
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.