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

C++ 在C++;,是否可以通过使用Others的模板向重载运算符提供参数?,c++,C++,例如,我可以有如下语句: A = B *<5> C; A=B*C; 其中5是参数(可提供上下文),*是重载运算符,运算符*使用给定参数 例如,下面列出了一个非工作且不太有意义的代码(只是为了说明这一点) (当然,如果我们定义一个新函数mul i.o.重载现有的*运算符,这是可能的。) struct myClass{ int-val=0; myClass(int x){ val=x; } 模板myClass运算符*(myClass x){ 返回val*x.val+s; }; };

例如,我可以有如下语句:

A = B *<5> C;
A=B*C;
其中5是参数(可提供上下文),*是重载运算符,运算符*使用给定参数

例如,下面列出了一个非工作且不太有意义的代码(只是为了说明这一点)

(当然,如果我们定义一个新函数mul i.o.重载现有的*运算符,这是可能的。)

struct myClass{
int-val=0;
myClass(int x){
val=x;
}
模板myClass运算符*(myClass x){
返回val*x.val+s;
};
};
int main()
{
我的a级(10)、b级(3);
myClass c=a*b;
}
==编辑====

为了更好地解释这个问题,我想补充一些动机:

元编程通常提供了一种扩展语言的方法。 当编译器看到一个表达式C=a*B时,它当然知道a和B,但它也知道结果的去向,在本例中是C,并且可以根据这些知识来提供更好的代码

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

之所以需要类似*的参数,是因为该参数可以设置为可选参数,仅在需要时使用,而在不需要时使用-这是正常的*


使用:c=a.运算符*b;正如下面建议的那样,它可以工作并解决问题

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

myClass c = a *<5> b;
myClass c=a*b;
进入

myClass c=a.operator*(b);

是的,您可以,但您需要这样做:

myClass c = a.operator*<5>(b);
myClass c=a.operator*(b);

myClass c=a.模板运算符*(b);

我可以想出一种解决方法,允许您保持正常的运算符语法,同时仍然在一个额外的参数中使用隧道:

  • 用自己的
    运算符*
所以你的呼叫站点看起来像

A = wrapper<5>(B) * C;
A=wrapper(B)*C;
其中
wrapper
类似于
std::reference\u wrapper
,带有
运算符*
返回。。。无论
B*C
是什么


这看起来太笨重了,真的觉得不值得。我想如果你愿意,它可以从Nathan的答案中转发给模板成员
操作符*

XY问题。使用命名函数。重载运算符的要点是使用现有运算符的语法。这将违反这一点。您应该只使用一个普通的模板方法。如果您的关注是基于返回类型,您可以考虑返回一个代理,该代理基于它的<代码>代理::操作符T-())/代码>或“代码> B。*(*)*c/代码>如果您想要在其中出现5的拼写。
myClass c = a.operator*<5>(b);
myClass c = a.template operator*<5>(b);
A = wrapper<5>(B) * C;