使用 std::function,除非有令人信服的理由不使用
在 C 中使用回调函数时,可以选择使用C 风格的函数指针和较新的 std::function 可能是一个有争议的问题。让我们来看看每个选项的优缺点。
C 风格函数指针:
std::function:
何时使用 std::function:
在大多数情况下,std::function 是首选。它比函数指针更灵活且面向未来。除非有特定的性能问题,否则通常建议使用 std::function 来传递回调。
何时使用函数指针:
如果性能至关重要考虑到回调函数不需要捕获任何上下文变量,那么函数指针可能是更好的选择。不过这种情况比较少见。
第三个选项:模板参数
如果您希望回调函数是任何可调用对象,请考虑使用模板参数。这种方法提供了灵活性,但需要在标头中实现外部函数。
汇总表:
Feature | Function Pointer | std::function | Template Parameter |
---|---|---|---|
Can capture context | No | Yes | Yes |
Call overhead | None | Small | None |
Can be inlined | No | No | Yes |
Can be stored in class member | Yes | Yes | No |
Implemented outside of header | Yes | Yes | No |
Supported without C 11 standard | Yes | No | Yes |
Readability | Poor | Good | Fair |
结论:
总的来说,std::function 的优点超过了函数指针。它更加灵活、面向未来且可读。仅当存在特定性能问题或回调函数不需要捕获任何上下文变量时才使用函数指针。
以上是std::function 与函数指针:什么时候应该选择什么?的详细内容。更多信息请关注PHP中文网其他相关文章!