【发布时间】:2020-04-01 17:22:27
【问题描述】:
假设我有一些用户定义的类型 T,它有望支持混合模式算术,例如 T + 2、15 + T 和 T + T。
我可以定义 operator + 来接受不同类型的操作数:
T operator+(T a, T b) {
return a += b; // assume that operator += is implemented as a member function of T
}
T operator+(T a, int b) {
// implementation
}
T operator+(int a, T b) {
// implementation
}
如果类型 T 预计支持与许多其他类型(int、double、string 等)的算术运算,那么 T 和这些类型的组合数量及其位置(T、string/string、T)将非常高.
我的问题是是否有更优雅的方式来重载运算符以减少此类组合的数量。
【问题讨论】:
-
您可以只实现
T operator+(const T&, const T&)函数,并确保您有适当的T构造函数,这些构造函数采用您希望能够添加的其他类型。编译器在查找函数时最多允许每个参数进行一次转换,并且这些构造函数将提供它。如果你有G和H类型,这可能会变得很麻烦,并且你想要一个将它们加在一起以创建一个新的G的概念,以及另一个创建一个新的H的概念。所以要小心。 -
感谢您的回答。也许这是最简单的方法,因为我有适当的构造函数来从 int 和 string 创建 T。