0

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

4

5 回答 5

5

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

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

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

于 2009-12-22T07:30:56.997 回答
2

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

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

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

因为您应该发送一个指针,指向另一个将为您计算一些工作的函数。我最近写了一篇关于 Python 和 C 中的函数指针的博文,看看它,你可能会发现它很有帮助。这可能不是在 C 或 C++ 中委派工作的“传统”方式,但话说回来,术语说我有点正确。

于 2009-12-22T07:32:16.207 回答
2

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

于 2009-12-22T07:28:15.857 回答
1

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

从这个意义上说,qsort 中使用的函数指针不是委托,而是一个回调,其中框架模块可以由用户软件扩展,就像好莱坞原则一样。

于 2009-12-22T08:39:40.627 回答
0

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

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

于 2009-12-22T07:30:37.623 回答