【发布时间】:2009-04-07 00:03:41
【问题描述】:
考虑以下两种使用场景(如你所见,即最终用户只会对使用Vector2_t和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;
我无法确定哪个是更好的解决方案。 继承的明显优势是派生类中的代码重用;一个可能的缺点是性能(更大的尺寸,用户可能通过价值等)。 专业化似乎可以避免这一切,但代价是我不得不多次重复自己。
我错过了哪些其他优点/缺点,在您看来,我应该走哪条路?
【问题讨论】:
标签: c++ inheritance specialization