THE C++ STANDARD LIBRARY中的一句话的理解

lx_cyh 2003-01-05 03:39:41
p257
Note that the sorting criterion PersonSortCriterion is a type. Thus, you can use it as a template argument for the set. This would not be possible, if you implement the sorting criterion
as a plain function (as was done on page 123).
我认为用函数指针可以做到 “This would not be possible,”???
...全文
88 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
J2eeLearner 2003-01-08
  • 打赏
  • 举报
回复
无论是用function还是functor,都能够完成这个这里的“比较”任务!

只是如果你是用Function,按照我知道的,那么你必定是让他作为函数的参数,而这个参数是一个指针,

如果你用Functor,那么你可以把Functor作为模板参数, 这里优化多多了!

//
你那样的用法,我还没看到过,也就是说不用functor,而用function, 能用它作为模板参数实现吗?
lx_cyh 2003-01-07
  • 打赏
  • 举报
回复
to J2eeLearner(jinfeng_Wang):
对于我开始的提问。是不是如下理解更好一点:

typedef bool (pFun*) (int,int);

bool Compare(int i, int j);

void sort( pFun pCompare );

main()
{
...
sort(&Compare); // 这个参数属于函数参数
...
}

template<typename T> class sort{
....
}

sort<pFun> mySortObject;
即使合法,却无法做到像这样 sort<Compare> mySortObject,即真正的比较标准传不进来(因为Compare不是类型)。

而把Compare做成一个类型(class),一切搞定。

earthharp 2003-01-06
  • 打赏
  • 举报
回复
函数指针可以的。
当然可以。
BorlandC 2003-01-06
  • 打赏
  • 举报
回复
Function Objects should be used!
J2eeLearner 2003-01-06
  • 打赏
  • 举报
回复
函数指针是否可以作为模板参数,我还不敢确定! 不过还真的没看到过,如果不可以,估计也是因为类型推导比较复杂的缘故。 STL里面都是使用的Functor完成的。曾经这么想过,有了Functor,C++程序还需要Function么? :)
J2eeLearner 2003-01-06
  • 打赏
  • 举报
回复
差也,差也!
排序的标准 是什么?如果简单的说,就是类似operator<()的东西,也就是一个函数而已,而函数只能用函数指针带入
例如:
typedef bool (pFun*) (int,int);

bool Compare(int i, int j);

void sort( pFun pCompare );

main()
{
...
sort(&Compare); // 这个参数属于函数参数
...
}

而Functor是一个类型(class)
class Compare
{
bool operator(int i, int j)
{ ....}
};

template <class T> sort ()
{
....
}

int main()
{
...
sort<compare> () //大致的写成这样,这里的比较是作为模板参数带入的
...
}

//
比较上面的不同吧,Functor可以比Function多好多东西,比如说Functor里面可以有数据成员,用于保存每个Functor object的内部状态 , :)

shornmao 2003-01-06
  • 打赏
  • 举报
回复
他的意思是类型可以作为模板参数,而函数指针不可以。
至于作为模板参数的意义,则在于,即使成员类型相同,而排序准则相同,那么两个容器也是类型不同的。
lx_cyh 2003-01-06
  • 打赏
  • 举报
回复
我似乎有点明白了
typedef int (*f)();
template <typename T> class MyClass {
.....
}
MyClass <f> a ;//这句非法吗?我认为不非法
我认为问题的关键是排序的标准无法传入MyClass(像标准C库qsort的比较函数那样), f只是类型。如果f做成类就可以了。
另外,为了感谢大家的回答,此贴我将加成100分
J2eeLearner 2003-01-06
  • 打赏
  • 举报
回复
另外,作为一个类型来说,(我觉得这里就是一个Sort Functor),比单纯的Function有很多的优越性! Functor,Function两者的使用区别是比较大的,这里Function不能作为模板参数就是一个例子!
J2eeLearner 2003-01-06
  • 打赏
  • 举报
回复
类型可以作为模板参数,而函数指针只能作为“函数的参数”

这两个参数是不一样的。

另外,模板参数是在实例化时候确立的,也就可以在编译连接其间得到优化。
guyu_jj 2003-01-05
  • 打赏
  • 举报
回复
译:注意排序准则(PersonSortCriterion是一个类名)是一个类型,因此,你能。。。
asvaboy1980 2003-01-05
  • 打赏
  • 举报
回复
gz

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧