传递函数的缺点
Disadvantages of passing around functions?
我正在学习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
使用函子。
- 通过键入的引用问题传递函数
- 通过两个嵌套函数传递C++函数的名称
- 如何从模板类传递函数
- 从私有函数传递函数作为参数
- 如何通过模板传递函数?
- 传递函数指针时未解析的外部符号
- 传递函数指针代替插槽函数
- 如何在 arduino 中传递函数参数
- "double(*)(string, double, double)"尝试传递函数C++时"double"转换错误
- 按引用传递函数参数
- 如何在类(C )中作为参数传递函数
- 在检查传递函数标识符时是否获得模板参数时遇到问题
- 在类之间传递函数指针
- 在C++中传递函数
- 为什么这是一个按指针传递函数
- 当指针具有可选参数时,如何传递函数指针
- C++模板在传递函数签名时未进行编译
- 是否可以通过引用传递函数对象
- C++传递函数作为具有多态类型的参数
- 传递函数的缺点