Function Object是Generic Algorithmic所特有的嗎?

wangyangcheng 2003-10-19 10:28:06
1.Function Object與Function Object Adapter是Generic Algorithmic所特有的嗎?
自行定義的函數可否使用它?
怎么樣用呢?

2.Iterator classes的dereference﹑inequality﹑increment等運算符都是由其inline函數實現的﹐那它在針對不同的container時﹐比如vector﹑list﹑dqueue時是通過何種機制實現的呢?尤其是container的元素型別不同時。(是overload還是template?)
...全文
42 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgsw12345 2003-12-01
  • 打赏
  • 举报
回复

1.1泛型算法可否傳入自行定義的Function Object?

1.2自定義的函數可否用到標准程序庫的Function Object?
--------
都可以的,就等實現一個委托的綁定。在The C++ Programing Language 中稱此函數對象為"謂詞"
wangyangcheng 2003-12-01
  • 打赏
  • 举报
回复
可否讲解一下函数对象?
http://expert.csdn.net/Expert/topic/2512/2512228.xml?temp=.3814051
Cowboy22 2003-10-31
  • 打赏
  • 举报
回复
模糊所以矛盾, 建议找本书看.
wangyangcheng 2003-10-30
  • 打赏
  • 举报
回复
再請教一下﹐若要自定義一個Function Object傳給Generic Algorithm,如何知道其接口是怎樣的呢?
如﹕

class longer_than
{
public:
bool operator()(string &str1,string &str2)
{
return str1.size()>str2.size();
}
};

longer_than lt; //實例化一個對象
sort(svec.begin(),svec.end(),lt); //傳給泛型算法sort(),那sort()是
//怎么樣去用lt.operator()的呢?
//我若把lt的返回值
//再改成返回一個字符串﹐sort()可以用它嗎?

謝謝﹗



ajoo 2003-10-20
  • 打赏
  • 举报
回复
plainsong解释的很精彩。
function object在c里面就是callback的概念。


c用函数指针实现,但是函数指针的问题是无状态。这和fpl里的高阶函数差距很大。
到了c++, 可以用functor来把状态封装进对象。java类似,用接口来做callback。这都是OO语言用来模拟fpl lamda的典型方法。也就是说,对同样的问题,functional世界用lamda来解决,imperative世界用接口来解决。

c++需要operator()是因为它要让传统的函数指针和functor一样用法。保证了一致性。

java因为没有全局函数,所以这个需要不迫切。


cxjddd 2003-10-20
  • 打赏
  • 举报
回复
function object 是 Generic Algorithmic 大量使用的,但不是专用的。
ttlb 2003-10-19
  • 打赏
  • 举报
回复
1 可以
template <typename T>
class Compare
{
public:
int operator() (T lhs, T rhs)
{
if (lhs < rhs)
return -1;
else if (lhs > rhs)
return 1;
else
return 0;
}
};
这个就可以用在标准库的sort上
2 也可以
bosedom 2003-10-19
  • 打赏
  • 举报
回复
自定义的函数可以用到标准库中的Function Object.如自己写一个比较的函数,就可以用标准库中的less<>等Function Object.

还有自定义的Function Object如果要用Adptor的话,要从一个基类继承的(好像叫binary_function),不然不能用。
wangyangcheng 2003-10-19
  • 打赏
  • 举报
回复
Thanks!


1.1泛型算法可否傳入自行定義的Function Object?

1.2自定義的函數可否用到標准程序庫的Function Object?
ttlb 2003-10-19
  • 打赏
  • 举报
回复
1 是的,用法:
template <typename T>
class Compare
{
public:
int operator() (T lhs, T rhs)
{
if (lhs < rhs)
return -1;
else if (lhs > rhs)
return 1;
else
return 0;
}
};
template<typename T, class C>
void sort(T *ptBegin, T *ptEnd, C Cmp = Compare<T>())
{
if (ptBegin >= ptEnd - 1)
return;
for (T *ptIter = ptBegin; ptIter != ptEnd - 1; ++ptIter)
{
for (T *ptIter2 = ptIter + 1; ptIter2 != ptEnd; ++ptIter2)
{
if (Cmp(*ptIter, *ptIter2) > 0)
swap(*ptIter, *ptIter2);
}
}
}
2 好像每一个专门的container都定义了自己的iterator class
短歌如风 2003-10-19
  • 打赏
  • 举报
回复

  function object其实就是封装了一个函数的对象,是当需要传进一个处理函数时用来代替传统的“函数指针”的,它并不是gp的专利,只不过在gp中实现时可以利用gp自动适应类型的方法使对函数的调用无附加代价,而用纯oo方法时就只有利用多态来实现,从而增加了调用的代价,对效率敏感的coders通常宁可使用函数指针。
  事实上,在Java中的排序函数使用一个接口类型来传进对元素进行比较的函数,这就是一个多态函数对象的例子。

  函数对象不一定要定义一个operator(),这只是在C++中利用操作符重载的能力使它“更象”函数而已。而在不支持操作符重载的语言中就只能使用一个命名方法了。

Wolf0403 2003-10-19
  • 打赏
  • 举报
回复
function object 和 gp algo 就是为了通用才设计出来的。如果说 STL 的代码不能用我的 fo/algo,或者我的代码不能用 stl 的 fo/algo,要它何用?
njSeeWhy 2003-10-19
  • 打赏
  • 举报
回复
function object不应该是generic algorithm中特有的吧,只要定义了operator ()的class都可以作为function object用的,只是在STL中用得比较多而已,但并不是它专用的呀

24,854

社区成员

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

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