C++核心准则T.40: 使用函数对象向算法传递操作

网友投稿 732 2022-11-13

C++核心准则T.40: 使用函数对象向算法传递操作

C++核心准则T.40: 使用函数对象向算法传递操作

T.40: Use function objects to pass operations to algorithms

T.40: 使用函数对象向算法传递操作

Reason(原因)

Function objects can carry more information through an interface than a "plain" pointer to function. In general, passing function objects gives better performance than passing pointers to functions.

相比普通的函数指针,函数对象可以通过接口传递更多的信息。相比传递函数指针,传递函数对象通常可以提供更好的性能。

Example (using TS concepts)(示例(使用TS概念))

bool greater(double x, double y) { return x > y; }sort(v, greater); // pointer to function: potentially slowsort(v, [](double x, double y) { return x > y; }); // function objectsort(v, std::greater<>); // function objectbool greater_than_7(double x) { return x > 7; }auto x = find_if(v, greater_than_7); // pointer to function: inflexibleauto y = find_if(v, [](double x) { return x > 7; }); // function object: carries the needed dataauto z = find_if(v, Greater_than(7)); // function object: carries the needed data

You can, of course, generalize those functions using auto or (when and where available) concepts. For example:

你当然可以使用auto或(如果可以)概念生成这些函数。

auto y1 = find_if(v, [](Ordered x) { return x > 7; }); // require an ordered typeauto z1 = find_if(v, [](auto x) { return x > 7; }); // hope that the type has a >

Note(注意)

Lambdas generate function objects.

Lambda表达式生成的是函数对象

Note(注意)

The performance argument depends on compiler and optimizer technology.

性能指标由编译器和优化技术决定。

Enforcement(实施建议)

Flag pointer to function template arguments.标志函数指针类型的模板参数。Flag pointers to functions passed as arguments to a template (risk of false positives).标记传递给模板参数的函数指针(误检出的风险)

原文链接

​​的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

觉得本文有帮助?请分享给更多人。

面向对象开发,面向对象思考!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从log4j2到Disruptor详解
下一篇:这是一份不完整的数据竞赛年鉴!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~