C++ 中的扩展方法

2023-11-27

我正在寻找 C++ 中扩展方法的实现,并发现了这个 comp.std.c++ 讨论其中提到polymorphic_map可以用于将方法与类相关联,但是,提供的链接似乎已失效。有谁知道这个答案指的是什么,或者是否有另一种方法以与扩展方法类似的方式扩展类(也许通过使用 mixins?)。

我知道规范的 C++ 解决方案是使用自由函数;这更多的是出于好奇。


不同的语言以不同的方式进行开发。特别是 C# 和 Java 对于 OO 有着强烈的观点,这导致一切都是对象心态(C# 在这里稍微宽松一些)。在这种方法中,扩展方法提供了一种扩展现有对象或接口以添加新功能的简单方法。

There are no extension methods in C++, nor are they needed. When developing C++, forget the everything is an object paradigm --which, by the way, is false even in Java/C# [*]. A different mindset is taken in C++, there are objects, and the objects have operations that are inherently part of the object, but there are also other operations that form part of the interface and need not be part of the class. A must read by Herb Sutter is What's In a Class?, where the author defends (and I agree) that you can easily extend any given class with simple free functions.

作为一个特别简单的例子,标准模板类basic_ostream有一些成员方法来转储某些原始类型的内容,然后使用(也是模板化的)自由函数进行增强,这些函数通过使用现有的公共接口将该功能扩展到其他类型。例如,std::cout << 1;被实现为成员函数,而std::cout << "Hi";是在其他更基本的成员方面实现的自由功能。

C++ 中的可扩展性是通过自由函数实现的,而不是通过向现有对象添加新方法的方式实现的。

[*]一切都是not一个东西。

在给定的域中将包含一组可以建模的实际对象和可以应用于它们的操作,在某些情况下,这些操作将是对象的一部分,但在其他情况下它们不会。特别是你会发现实用程序类在声称一切都是对象的语言中实用程序类只是一个试图隐藏这些方法不属于任何特定对象这一事实的层。

即使某些作为成员函数实现的操作也不是真正对对象的操作。考虑添加一个Complex数类,怎么样sum (or +)对第一个参数的操作比对第二个参数的操作更多?为什么a.sum(b); or b.sum(a),不应该是sum( a, b )?

强制操作成为成员方法实际上会产生奇怪的效果——但我们只是习惯了它们:a.equals(b); and b.equals(a);即使实施也可能会产生完全不同的结果equals是完全对称的。 (考虑当以下任一情况时会发生什么a or b是一个空指针)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的扩展方法 的相关文章

随机推荐

  • 在 Python 中查找每一行的最大值

    如何在Python中找到每一行的最大值并将其存储在NumPy数组或Pandas DataFrame中并将其存储在NumPy数组中 即下面的输出 0 511474 0 488526 0 468783 0 531217 0 35111 0 64
  • java.io.FileNotFoundException:打开失败:EACCES(权限被拒绝)

    当我尝试将位图存储到存储中时出现此错误 File path new File Environment getExternalStoragePublicDirectory Environment DIRECTORY PICTURES pict
  • 如何让 tslint 监视特定文件夹中的更改?

    我正在使用 webpack 2 它会告诉我我的打字稿代码是否存在编译问题 但是 我还没有找到一种方法来通过它运行 tslint 并让它在 webpack 在开发服务器模式下运行时检测到的每个更改中运行 我尝试过tslint 加载程序工作 但
  • 在 JBoss EAP 7 中配置 Http 标头

    您知道是否有标准方法来配置 JBoss EAP 7 发送到客户端的 Http 标头 我主要感兴趣的是能够配置以下内容 X XSS 保护 X 框架选项 严格的运输安全 内容安全策略 X 内容类型选项 我在互联网上找到了这个链接 https b
  • 使用 CSS3 模糊滤镜时图像周围出现白色模糊?

    今天我想重新设计我的网站并以不同的方式处理它 我并没有专注于排版 而是添加了大图像和小文本 我简单地做了 html background url img background png no repeat center center fixe
  • iOS swift 将 mp3 转换为 aac

    我正在转换一个mp3 to m4a在 Swift 中 代码基于this 当我生成 PCM 文件时它起作用 当我将导出格式更改为 m4a 时 它会生成一个文件 但无法播放 为什么会腐败 这是到目前为止的代码 import AVFoundati
  • Node.js 在 Windows 上的表现是否很差,对于基本 I/O 肯定不会比 apache 慢

    问题 我得到的结果合理吗 有什么东西可以对减少每秒请求数产生如此大的影响吗 Edit 我的一个朋友刚刚在 Linux 上对相同的应用程序进行了基准测试 平均 r s 约为 7000 Edit 2 我检查了 Node exe 的 CPU 使用
  • Xcode 4 - 构建输出目录

    我在 Xcode4 beta 5 中设置 定位输出文件时遇到问题 它们被放置在某处 Library Developer ugly path 我什至无法在我的产品上选择 在查找器中显示 对于简单的 C 项目 Foundation 工具甚至 C
  • jQuery 文本框光标到文本末尾?

    我正在尝试使用 jQuery 在用户点击 enter 后基本上替换文本框中文本末尾的光标 我的 输入 部分正在工作 但我不知道 输入部分之后 如何 我可以让光标返回到文本框中输入的文本的末尾 即此刻 当用户按 Enter 键时 光标转到新行
  • 使用 CanCan 授权命名空间和嵌套控制器

    我在让 cancan 授权我的新路线设置时遇到了一些麻烦 namespace api do namespace v1 do resources users do resources user songs resources friendsh
  • 如何将输入值获取到 Angular 的 $scope 中?

    我是 Angular 的新手 我正在尝试做一些非常基本的事情 这是视图的一部分 所有角度文件都添加到其他地方 div div
  • 如何将 bash 命令的输出存储在变量中? [复制]

    这个问题在这里已经有答案了 我正在尝试编写一个简单的脚本来终止进程 我已经读过使用 bash 和正则表达式在一行中查找并终止进程所以请不要将我重定向到此 这是我的代码 LINE ps aux grep 1 PROCESS LINE awk
  • 用于在自连接表中的嵌套

    Please help me solve my big problem in my on line shopping project i created a dynamic Category List with Infinite Level
  • 搜索满足 Column1 <= X <= Column2 的行的 SQL 查询非常慢

    我正在使用 MySQL 数据库 并有下表 CREATE TABLE SomeTable PrimaryKeyCol BIGINT 20 NOT NULL A BIGINT 20 NOT NULL FirstX INT 11 NOT NULL
  • 所有事件驱动框架都应该是单线程的吗?

    http weblogs java net blog kgh archive 2004 10 multithreaded t html认为多线程 GUI 框架是一个失败的梦想 非 GUI 框架怎么样 这个经验法则是否适用于所有事件驱动框架
  • 应用程序启动器图标更改为 Oreo 上的默认图标

    我创建了一个带有自己的启动器图标的 Android 应用程序 它与牛轧糖配合得很好 但在 Oreo 中 我的图标被默认的 Android 图标取代 我已经定义了ic launcher png and ic launcher round pn
  • AutoMapper 与 ValueInjecter [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • 将音频 MMS:// 流式传输到 iPhone

    我想直播mms url我的 iPhone 应用程序 但到目前为止 很难获得有关该主题的信息 我知道有几个应用程序已经可以做到这一点 FStream WunderRadio Tuner 并且我已经阅读了一些关于它们可能使用 libmms 和
  • 模板类C++

    我尝试为我的大学项目设计一个模板 我写了以下代码 ifndef LinkedList H define LinkedList H include Link h include
  • C++ 中的扩展方法

    我正在寻找 C 中扩展方法的实现 并发现了这个 comp std c 讨论其中提到polymorphic map可以用于将方法与类相关联 但是 提供的链接似乎已失效 有谁知道这个答案指的是什么 或者是否有另一种方法以与扩展方法类似的方式扩展