【发布时间】:2021-01-08 03:19:52
【问题描述】:
在 C++ 中,我们可以执行以下操作,
template <class OP>
int f(OP op){
return op(1,2);
}
int main(){
int res1 = f(std::plus<int>{});
int res2 = f(std::multiplies<int>{});
}
我怎么能用简单的数字运算符做同样的事情,
int main(){
int res1 = f(+);
int res2 = f(*);
}
没错,我想知道的是函数f中'return'这行怎么写。
【问题讨论】:
-
#define f(op) []{ return 1 op 2; }() -
操作符并不多,因此为每个操作符定义一个包装器实际上是最少的代码,如果这真的让您感到困扰,您可能可以单行定义。最好将其保持打开状态,例如使用
std::function或 lambda,因为这样您就可以进行非平凡的操作,例如乘加。 -
你不能。对于类或枚举类型,非成员运算符是可行的,因此可指定为参数,但不适用于算术本机类型。您似乎在询问如何将
T operator +(T,T)作为参数传递,简而言之,您不能(如果您可以,std::plus会有什么好处? -
@tadman • 我认为如果你想做 OCaml,就使用 OCaml,而不是 C++ 试图伪装成 OCaml。
-
@Eljay 我的意思是更多关于
#define这是一种肮脏的行为。
标签: c++ parameters operator-keyword