关于typedef的问题。typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs)是什么意思?

如题,Sales_item是类名。我只见过typedef int (*f) ()这样的,其中f是函数名。但是这种个情况是什么意思啊?书上说Compare是类型。

typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs) 很显然是函数指针
这里使用 typedef 来简化定义
函数指针bool (*Compare) (Sales_item &lhs, Sales_item &rhs)
注意一定要写*Compare两边的括号,否则就成了bool *Compare (Sales_item &lhs, Sales_item &rhs)这样的返回bool指针的函数啦
下面我们举个实例
typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs);//简化定义函数指针Compare
bool fun(Sales_item &lhs, Sales_item &rhs)
{
if ((lhs+rhs)>520) //函数体
return true;
else
return false;
}
Compare sm= fun;//获取函数fun的地址给Compare指针
sm(1,2);//等值于fun(1,2);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-25
定义了一个符号 Compare,用该符号可以定义函数指针,指向一个返回bool且形参为Sales_item &lhs 和 Sales_item &rhs的函数。
可以这样用:
Compare p;
Sales_item &x,&y;
(*p)(x,y);追问

为什么书上说是类型?

而且在后面的容器里它是这样用的 vector vec;

追答

int 是一个整型数据类型,int* 是一个int型指针数据类型,同理,Compare是函数型指针数据类型。
只要能定义一种数据,就是一个数据类型。

追问

有点不明白,如果Compare是函数型指针数据类型,那么Compare p;p不就是一个函数型指针了吗?

追答

p就是函数型指针,不好意思,第一次回答里有误,用p调用函数直接写p(x,y)就行,有点忘了,sorry

追问

还有个问题typedef bool (*Compare) (Sales_item &lhs, Sales_item &rhs);这只是个声明吧,写在h文件里。如果我要在cpp文件里定义这个函数该怎么写? Compare(Sales_item &lhs, Sales_item &rhs) { } 报错啊

本回答被提问者采纳
第2个回答  2011-08-25
compare是用typedef声明的函数指针类型,可用compare定义函数指针如compare compare1;
不加typedef就是声明一个叫compare的函数指针。追问

怎么定义这个函数?

第3个回答  2011-08-25
items 没有赋值的过程呢?
stl容器可不是想象的那么简单几句代码就可以使用的
追问

???关STL什么事啊

相似回答