代表们在C ++中的含义是什么?

时间:2009-12-22 07:19:26

标签: c++ delegates functor

c ++中委托代表什么意思,c / c ++中的排序函数是什么,它将比较函数/函数作为最后一个参数作为委托形式?

5 个答案:

答案 0 :(得分:5)

“委托”实际上并不是C ++术语的一部分。在C#中,它类似于一个美化的函数指针,它可以存储对象的地址以及调用成员函数。你当然可以在C ++中用类似的小东西编写这样的东西。或者更通用:将boost::bind<>boost::function<>结合使用。

在C ++中,我们使用术语“函数对象”。函数对象是通过函数调用operator()“可调用”的任何东西(包括函数指针)。

std :: sort接受一个“谓词”,它是一个特殊的函数对象,不会修改它的参数并返回一个布尔值。

答案 1 :(得分:2)

C ++中的回调函数可以(松散地)称为delegates的形式(尽管delegate术语不用于此)。回调函数使用Pointers to Functions将它们作为参数传递给其他函数。 但是与C ++中的回调函数相比,C#中的委托更高级。

答案 2 :(得分:2)

委派工作意味着与他人分担工作量。在现实生活中,如果你要委派你的任务,即如果你是一名经理,你就会分享你的工作,期望别人完成一项任务,而你不必知道如何。

这个概念在C ++和任何其他具有委托能力的语言中是相同的。在C中,您可以将其视为委托:

int calculate(int (*func)(int c), int a, int b)

因为你需要发送一个指针,指向另一个为你计算一些工作的函数。我最近在Python和C中编写了一个blog post函数指针,检查出来,你可能会觉得它很有帮助。这可能不是用C或C ++委派工作的“传统”方式,但是再一次,termonoligy说我有点正确。

答案 3 :(得分:1)

Delegation主要用于将函数传递给嵌入在类中的功能(pimpl,聚合,私有继承)。它们主要是(内联)一行的函数,调用成员类的函数。据我所知,它与C#的代表无关。

从这个意义上讲,qsort中使用的函数指针不是委托,而是一个回调,其中框架模块可以通过用户软件进行扩展,如Hollywood principle

答案 4 :(得分:0)

委托:一个对象,其作用类似于具有订阅系统的多功能指针。它确实简化了静态或“对象”成员函数指针在回调通知和事件处理中的使用。

This链接以清晰的方式解释代表,或者您也可以参考MSDN链接。