在C ++中,是否可以通过使用否则的模板来向重载的运算符提供参数?

Pol*_*015 0 c++

例如,我可以有如下声明:

A = B *<5> C;
Run Code Online (Sandbox Code Playgroud)

其中5是一个参数(可以提供上下文),*是重载运算符,而operator *使用给定的参数。

例如,下面列出了A NON-WORKING且意义不大(仅表示重点)。

(这当然是可能的,如果我们定义了一个新的功能MUL io的重载现有的运算符*)。

struct myClass {
   int val = 0;
   myClass (int x) {
      val = x;
   }

   template<int s> myClass operator* (myClass x) {
        return val * x.val + s;
   };
};

int main()
{
   myClass a(10), b(3);
   myClass c = a *<5> b;
}
Run Code Online (Sandbox Code Playgroud)

====编辑====

我想增加一些动机,希望能更好地解释这个问题:

通常,元编程提供了一种扩展语言的方式。当编译器看到表达式C = A * B时,它当然知道A和B,但是它也知道结果的去向,在这种情况下为C,并且可以根据此知识采取行动以提供更好的代码。

当运算符重载时,我们只有A,B-提供有关结果的一些信息,例如,在某些情况下C的类型可以提供更好的优化,而对于我的原始情况,可以避免完全错误的结果。

想要** 5之类的原因是该参数可以设置为可选参数,并且仅在需要时使用,而在不需要时才使用-这是正常的*。

使用:c = a.operator * b; 如以下建议工作并解决了问题。

Nat*_*ica 5

为了能够指定模板参数,您需要切换到成员函数调用语法。那会变成

myClass c = a *<5> b;
Run Code Online (Sandbox Code Playgroud)

进入

myClass c = a.operator*<5>(b);
Run Code Online (Sandbox Code Playgroud)