C++ 中是否有与 Python 的 __rmul__ 等效的函数?

Dav*_*vid 0 c++ overloading operator-overloading

Python 3 允许重载*.

例如,

a*b

允许a通过提供方法来定义结果__mul__

然而,如果该方法返回,则调用NotImplemented,__rmul__方法b(如果存在)以给出结果。此处记录了这一点。

这样做的一个优点是我可以在ba知道a.

C++ 中是否有等效的方法__rmul__,或者是否有实现相同或类似事物的方法?

The*_*Fox 5

如果我错了,请纠正我,但根据我的理解,您需要为两个不同的类重载一个运算符。

您可以执行如下操作:

#include <iostream>

class A
{
public:
    int integer;
};

class B
{
public:
    double decimal;
};

//A * B
double operator*(A a, B b)
{
    return a.integer * b.decimal;
}

int main() 
{
    A a{12}; B b{2};
    double c = a * b;

    std::cout << c;
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我重载了operator*来将A和B类型的2个对象相乘。但它只适用于a * b,不适用于b * a。所以你可以这样做:

//B * A
double operator*(B b, A a)
{
    return a.integer * b.decimal;
}
Run Code Online (Sandbox Code Playgroud)