考虑以下两种使用场景(如您所见,即最终用户只会对使用Vector2_t
and感兴趣Vector3_t
):
[1]继承:
template<typename T, size_t N> struct VectorBase
{
};
template<typename T> struct Vector2 : VectorBase<T, 2>
{
};
template<typename T> struct Vector3 : VectorBase<T, 3>
{
};
typedef Vector2<float> Vector2_t;
typedef Vector3<float> Vector3_t;
[2]专业:
template<typename T, size_t N> struct Vector
{
};
template<typename T> struct Vector<T, 2>
{
};
template<typename T> struct Vector<T, 3>
{
};
typedef Vector<float, 2> Vector2_t;
typedef Vector<float, 3> Vector3_t;
我无法决定哪个是更好的解决方案。继承的明显优势是派生类中的代码重用;一个可能的缺点是性能(更大的尺寸,用户可能通过价值等)。专业化似乎可以避免这一切,但代价是我不得不多次重复自己。
我错过了哪些其他优点/缺点,在您看来,我应该走哪条路?