传递函数的缺点

Disadvantages of passing around functions?

本文关键字:缺点 传递函数      更新时间:2023-10-16

我正在学习C++(来自java),最近发现你可以传递函数。这真的很酷,我认为非常有用。现在我正在考虑如何使用它,我脑海中突然想到的一个想法是一个完全可定制的类。

对于完全可定制的类(代码),我的最好例子是说一个人类。后来的人可能会拿起一把剑(S),所以现在人可以访问与P和S相关的所有功能。

这是否存在限制或性能问题?这是草率的,只是普通的皱眉吗?

任何见解都是有教育意义的,谢谢。

~艾顿

当传递函数时 - 即指向函数的指针 - 调用总是间接的,因此可能比直接调用慢(并且肯定比内联调用慢)。

STL 使用函子建模。即:具有被调用的 operator() 成员的轻函数对象。这的优点是很有可能是内联的候选者,特别是如果函子和operator()非常简单(例如 std::less<T> )。

另请参阅:http://www.sgi.com/tech/stl/functors.html

由于

在调用函数之前必须取消引用指针或引用,因此性能略有下降。

这是一个非常有利的功能。 许多设计模式和多态性依赖于指向函数的指针。 查看"访客设计模式"。

另一种用法是函数表。 例如,您可以编写一个通用菜单引擎,该引擎使用不同的函数显示不同的菜单。

还要研究"工厂设计模式"。

传递函数绝对没有错,但它有点原始和限制。通常,除了要传递给函数的参数之外,还有一些要与函数关联的数据。此外,您可能希望将相关函数组合在一起并将它们作为一个函数传递。恭喜,你刚刚描述了一个C++课!

如果您想了解C++如何真正模糊界限,请考虑函子。这是一个具有operator()方法的类,因此您可以像调用函数一样调用它。与普通函数相比,它有两个直接的优点:它可以在调用之间保持状态,并且可以由编译器内联以获得卓越的性能。例如,std::sort优于旧 C qsort的情况并不少见,因为qsort使用函数指针,而std::sort使用函子。