我有以下问题/疑问: 假设我有一个模板类Couple,它有两个属性x和y,类型为xobject。 我可以很容易地定义同一类的Couple之间的总和,简单地按元素定义sum元素,如果它被定义为模板对象的总和,即:
Couple operator+(Couple in)
{
return Couple((*this).x+in.x,(*this).y+in.y);
}
通过这种实现,我可以计算Couple<int>
元素之间的总和。
我并不完全理解如何定义该类中Couple<int>
和Couple<something>
之间的总和。
问题是我不能在类之间专门化类尚未实现的类,即我不能写
Couple<'int'> Couple<'int'>::operator+(Couple<'something'>)
在夫妻班内。<
你知道怎么做吗?答案 0 :(得分:2)
您可以使用friend
模板功能:
template <typename T>
class Couple
{
private:
T x, y;
public:
Couple(T xx, T xy) : x{xx}, y{xy} { }
template <typename T0, typename T1>
friend Couple<std::common_type_t<T0, T1>>
operator+(const Couple<T0>& x0, const Couple<T1>& x1);
};
template <typename T0, typename T1>
Couple<std::common_type_t<T0, T1>>
operator+(const Couple<T0>& x0, const Couple<T1>& x1)
{
return {x0.x + x1.x, x0.y + x1.y};
}
我正在使用std::common_type_t
来计算适合T0 + T1
添加的类型。
如果您将friend
和x
的getter公开为评论中提及的 SebTu ,则可能不需要y
。