运营商可以用作功能吗?(C++)

3 c++ function-pointers operator-overloading

这类似于我问过的另一个问题,但是,我创建了一个表达式类,其工作原理如下:

expression<int, int> exp(10, 11, GreaterThan);
//expression<typename T, typename U> exp(T val1, U val2, oper op);
//where oper is a pointer to bool function(T, U)
Run Code Online (Sandbox Code Playgroud)

其中GreaterThan是先前定义的函数.我想知道为什么我不能这样做:

expression<int, int> exp(10, 11, >);
Run Code Online (Sandbox Code Playgroud)

特别是当>超载时

bool operator>(int a, int a){return (a > b);}
Run Code Online (Sandbox Code Playgroud)

这与GreaterThan相同:

bool GreaterThan(int a, int b){return (a > b);}
Run Code Online (Sandbox Code Playgroud)

一个返回bool并接受两个参数的函数.

new*_*cct 9

我不确定这是不是你要问的,但是C++标准库为标题中声明的许多C++运算符提供了函数对象<functional>.这包括std::plus(+),std::minus( - ),std::multiplies(*),std::divides(/),std::modulus(%),std::negate(一元 - ),std::equal_to(==),std::not_equal_to(!=),std::less(<),std::greater(>),std::less_equal(<=),std::greater_equal(> =),std::logical_and(&&),std::logical_or(||),std::logical_not(!)

所以也许你只是想要

expression<int, int> exp(10, 11, std::greater<int>());
Run Code Online (Sandbox Code Playgroud)


Nic*_*kis 6

代替:

expression<int, int> exp(10, 11, >);
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

expression<int, int> exp(10, 11, operator>);
Run Code Online (Sandbox Code Playgroud)

可以,因为它不适用于整数.但它适用于您将重载的其他类型或运算符.

您重载的运算符是正常函数,因此实际上您正在使用函数指针.