一個VEC 2和VEC3有很大的不同IMO,你所期望的代碼重用,如果他們有關係嗎?
對於不同的內置類型,簡單地使用模板類和模板的構造函數:
template<typename T1>
struct Vec2 {
Vec2(T1 const & X, T1 const & Y) : x(X), y(Y) {}
template <typename T2>
Vec2(Vec2<T2> const & V) {
x = static_cast<T1>(V.x);
y = static_cast<T1>(V.y);
}
T1 x, y;
};
template<typename T1>
struct Vec3 {
Vec3(T1 const & X, T1 const & Y, T1 const & Z) : x(X), y(Y), z(Z) {}
template <typename T2>
Vec3(Vec3<T2> const & V) {
x = static_cast<T1>(V.x);
y = static_cast<T1>(V.y);
z = static_cast<T1>(V.z);
}
template <typename T2, typename T3>
Vec3(Vec2<T2> const & V, T3 const & Z) {
x = static_cast<T1>(V.x);
y = static_cast<T1>(V.y);
z = static_cast<T1>(Z);
}
T1 x, y, z;
};
如果你想VEC 2和VEC3相關,有VEC 3模板繼承VEC 2模板,然後隱藏功能你需要重寫Vec3。
我最終做了類似的事情;我創建了一個Vec2,Vec3,Vec4,Point2和Point3實現的基類Vector類,以便重用Vector的功能,但僅暴露其操作的子集(如Point2和Point3的情況)或添加功能(專門的構造函數)。 – 2011-06-03 18:46:22