我正在尝试operator*
为 4 种情况实现乘法运算符 ( )。
想象一下我有一个class rain
.
namespace manchester {
namespace manchester_private_dont_use_this {
template<typename T>
class rain
{
public:
rain(T initial_rain)
: m_rain(initial_rain)
{
}
private:
T m_quantity_of_rain;
};
}
} //namespace manchester
假设这个类是在私有命名空间中声明的。typedef rain<float> rainf;
并typedef rain<double> raind
在非私有命名空间内公开此类的功能。私有命名空间是指另一个嵌套命名空间,称为namespace rainprivate_do_not_use_me
. (在示例中,我实际上添加了两个命名空间来解释我在说什么,但这并不重要。)这是我能想到的最好的方法,以防止最终用户(我)试图创建一个rain<int>
不很有意义,因为雨是以升为单位的,因此我们可以有非整数量。
无论如何,我要operator*
像我说的那样实现,以将雨量乘以 afloat
和 a double
。我是否正确假设因为这些类型可以隐式转换,所以我只需要实现一个运算符,其中 rhs 变量是 adouble
并且 lhs 变量是 a double
。(我实际上是指类型 T。)
同样,我在这里猜测 - 请参阅我之前关于一元运算符的问题,但我猜是这样的:(我再次找不到关于 SO 的任何信息来回答我的问题。)
// friend function:
inline rain<T> operator*(const rain<T>& _rain, const T _t)
{
return rain<T>(_rain.m_quantity_of_rain * _t);
}
inline rain<T> operator*(const T _t, const rain<T>& _rain)
{
return rain<T>(_rain.m_quantity_of_rain * _t);
}
再一次,我不确定,所以认为问比学错可能更好。我想到的4种情况就是上面的两种,然后是when的两种隐藏情况float
可以转换成double in the case when
T is type
double`,反之亦然。