c++ 中的委托是什么意思,在 c/c++ 中将比较函数/函子作为最后一个参数的排序函数是委托的一种形式吗?
5 回答
“委托”实际上并不是 C++ 术语的一部分。在 C# 中,它类似于一个美化的函数指针,它可以存储对象的地址以及调用成员函数。您当然可以在 C++ 中编写类似的东西作为一个小型库功能。或者更通用:boost::bind<>
结合boost::function<>
.
在 C++ 中,我们使用术语“函数对象”。函数对象是可以通过函数调用 operator() “调用”的任何东西(包括函数指针)。
std::sort 接受一个“谓词”,它是一个不修改其参数并返回布尔值的特殊函数对象。
委派工作意味着与他人分担工作量。在现实生活中,如果您要委派您的任务,即如果您是一名经理,您将分享您的工作,期望其他人完成任务,而您不必知道如何完成。
这个概念在 C++ 和任何其他具有委托能力的语言中是相同的。在 C 中,您可以将其视为委托:
int calculate(int (*func)(int c), int a, int b)
因为您应该发送一个指针,指向另一个将为您计算一些工作的函数。我最近写了一篇关于 Python 和 C 中的函数指针的博文,看看它,你可能会发现它很有帮助。这可能不是在 C 或 C++ 中委派工作的“传统”方式,但话说回来,术语说我有点正确。
C++ 中的回调函数可以(松散地)称为delegates
(尽管delegate
术语不用于此)的一种形式。回调函数使用指向函数的指针将它们作为参数传递给其他函数。但与 C++ 中的回调函数相比,C# 中的委托更高级。