我有一个代表2D向量的Vector
类。它是模板化的,可以使用任何数字类型来用于x和y组件。例如,我重载的算术运算符之一是*
,用于将向量乘以标量:
template <typename T, typename U>
inline const Vector<T> operator*(const Vector<T>& vector, U scalar) {
return Vector<T>(vector.x * scalar, vector.y * scalar);
}
我还有一个函数,参数顺序相反,以允许“scalar * Vector ”加上“Vector * scalar”。如您所见,我使用的是“<T,U>”而不是简单的“<T>”,以便标量不必与向量类型相同。当我没有这样做时,令人惊讶的是,“Vector<double> * int”无法编译(我认为int会自动扩展)。无论如何,我不只是想返回一个“Vector<T>”。我想模仿内置类型并返回更高精度的那个,“T”或“U”。因此,例如,“Vector<int> * double => Vector<double>”,而“Vector<double> * short => Vector<double>”。这可能吗?
declval
看起来也很方便,加一。 - Seth Carnegie-std=c++0x
,或使用MSVS 10及以上版本。 - Kerrek SBcommon_type
解决方案,但它对我不可用。尽管如此,这个答案同样值得被接受。 - mk12