[英]Can operators be used as functions? (C++)
这类似于我提出的另一个问题,但是,我创建了一个表达式类,其工作原理如下:
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)
其中GreaterThan是先前定义的函数。 我想知道为什么我不能这样做:
expression<int, int> exp(10, 11, >);
特别是当>超载时
bool operator>(int a, int a){return (a > b);}
这与GreaterThan相同:
bool GreaterThan(int a, int b){return (a > b);}
一个返回bool并接受两个参数的函数。
我不确定这是不是你要问的,但是C ++标准库为许多C ++的运算符提供了函数对象,在头文件<functional>
。 这包括std::plus
(+), std::minus
( - ), std::multiplies
(*), std::divides
(/), std::modulus
(%), std::negate
(unary - ) , 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>());
代替:
expression<int, int> exp(10, 11, >);
你可以这样做:
expression<int, int> exp(10, 11, operator>);
你可以,因为它不适用于整数。 但它适用于您将重载的其他类型或运算符。
您重载的运算符是正常函数,因此实际上您正在使用函数指针。
你不能写下面的内容:
bool operator>(int a, int a){return (a > b);}
C ++不允许为内置类型重载运算符。 请重新编写您的问题,特别是给出表达式模板的实际代码。
尼尔是对的,这不适用于内置类型。 至少有一个参数必须是“正式类型”。 另一个问题是
expression<int, int> exp(10, 11, >);
不是编译器喜欢你写的东西。 相反,您可以使用类似下面的代码
class A
{
};
class B
{
};
typedef bool (*oper)(A& a, B& b);
bool operator>(A& a, B& b)
{
return false;
}
bool func(A&a, B& b, oper op)
{
}
然后在你的代码中
A a;
B b;
func(a, b, operator>);
例如+运算符是类型的
int (__thiscall Integer::*)(int value)
用于操作员功能
int Integer::operator + (int i)
要传递操作员功能,您只需执行以下操作:
Integer a(10), b(20);
add(a, b, &Integer::operator +);
要用它,请执行以下操作:
(a.*functionPtr)(b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.