C++双向运算符,有可能吗?

mar*_*m91 2 c++ overloading operator-overloading

例如,我们有这个类:

class my_class
{
public:
  friend my_class operator* (const my_class&, int a);
  friend my_class operator* (int a, my_class&);  
};

my_class operator* (int a, my_class&)
{
    // do my_class * a
}

my_class operator* (int a, my_class&)
{
    // do a * my_class
}
Run Code Online (Sandbox Code Playgroud)

是否可以只做一个操作员*来做这两个人做的事情?

谢谢!

Meh*_*ari 6

你不能这样做.但是,您可以实现一个,只需从另一个调用它:

my_class operator *(const my_class &l, int r) {
    // implement the actual operator here.
}

my_class operator *(int l, const my_class &r) {
    return r * l;
}
Run Code Online (Sandbox Code Playgroud)

(请注意,您不能将后一个函数作为类的一部分实现.您必须在外部执行.第一个函数可以实现为实例方法,因为它的第一个参数是类类型.)