静态多态性定义和实现[关闭]

2024-03-22

我对这个概念有一些疑问静态多态性我有时听说;您可能主要在 C++ 上下文中解释它们,但我希望在适用的情况下提供与语言无关的答案(因此标记 C++ 和语言无关的).

  1. 我们如何define一般静态多态性?举个例子,我相信std::sortC++ 中的函数应被视为静态多态,因为它依赖于某些对象提供的某些接口表现得像迭代器,以及提供的迭代器接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是只是对特定情况的描述,还有更多内容?

  2. 常见的代码模式有哪些在C++中使用静态多态性?另外:是SPonly通过C++中的模板实现?

  3. 是不是真的给定的 UML 类图没有directly描述多态性是如何处理的,因此,它至少可以部分地静态或动态地实现?换句话说:静态多态性与动态多态性的选择是否独立于 OOP 模型,从而由实现者决定?

  4. 静态多态性只是 C++ 特有的吗以及与模板如何工作相关?如果没有,它是否存在于其他任何主流语言除了C++?我们可以在 Java、C# 等中拥有相当于静态多态性的东西吗?它会带来什么好处吗?

  5. 最重要的是...使用静态多态性有什么实际好处?我认为我们可以同意它降低了代码的灵活性;除了 - 在 C++ 的情况下 - 节省一个指针取消引用(虚拟函数/函数指针/委托成本)之外,还有什么优点?是什么问题类别静态多态性在哪里特别有用,实现的正确选择是什么?


  1. 静态多态行为是类型多态性 http://en.wikipedia.org/wiki/Type_polymorphism这发生在编译时而不是运行时。
  2. Yes.
  3. UML 是关于类在运行时如何交互的——我不相信有用于描述模板的 UML 格式,但我可能是错的。
  4. 据我所知,它是 C++ 特定的,但考虑到我没有使用过所有发明的语言,我对此并不肯定。 :) 也就是说,在某些情况下,使用运行时而不是编译时收集的信息,C# 和 Java 等 JIT 语言通常非常擅长消除间接调用对性能的影响。不管这是否是在编译时,都还没有定论……毕竟,它被称为“即时”Compiler.
  5. 主要好处就是性能。运行时多态性可以做静态多态性可以做的所有事情(事实上它可以做更多),但它会带来间接调用的成本(如果有足够多的间接调用,这可能会很昂贵)

现在,模板本身除了实现编译时多态性之外还有许多用途——例如 SFINAE 魔法,它使得boost::bindwork 当然不是多态的——它只是为了消除语言本身的不一致。

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

静态多态性定义和实现[关闭] 的相关文章

  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 未使用的功能会产生什么后果

    我想知道在代码中使用未使用的函数会产生什么 如果有什么后果 如果您查找并删除所有未使用的函数和变量 性能是否会有明显的改进 或者删除未使用的函数和变量只是一个好习惯 未使用的功能不会损害性能 他们让维护代码的人的工作变得更加困难 现代 ID
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 意外的 const 引用行为

    include
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐

  • 在 GitHub 上创建一个存储库的子目录,并将其作为我自己的存储库的一部分

    抱歉 我对 Git 和 GitHub 很陌生 我已经阅读了一些内容 但我不确定我想要做的是否是entirely可能的 基本上我想分叉 XBMC 上使用的 Confluence Skin 并修改此处的各种元素 https github com
  • 在sql server 2008 R2中使用PIVOT时获取空数据

    我将以下查询与 PIVOT 一起使用 SELECT FROM SELECT MEMBER PROPERTY as MEMBER PROPERTY MEMBER VALUE as MEMBER VALUE MEMBER ID as MEMBE
  • PYTHON 中的希腊语编码

    我正在尝试存储一个字符串 并在 python 中使用 nltk 对它进行标记后 但我无法理解为什么在对它进行标记后 它创建一个列表 我看不到列表中的字符串 有人可以帮我吗 这是代码 a b nltk word tokenize a b xc
  • 从数组中查找唯一的值组合,过滤掉任何重复的对

    使用 php 我希望找到一组指定长度的唯一组合 同时确保多个组合中不存在两个相同的值 例如 如果我想使用此数组查找 3 个值的所有唯一组合 如果 3 个值不可能 则回退到 2 个值的组合 array array array 1 2 arra
  • 是否可以在 OCaml 解释器中使用箭头键?

    每次我在解释器中使用这些键时 我都会不断出现如下符号 D C 我在 ZSH 中使用 Linux Mint 12 但是在 Ubuntu 中使用 bash 得到了相同的结果 另外 ssh 中也是同样的情况 库存 OCaml 顶层没有内置行编辑功
  • AJAX 错误:类型错误:在此上下文中无法访问“参数”、“被调用者”和“调用者”

    我正在系统上进行 API 调用并收到此错误 我可以使用具有相同 URL 的curl 和 Postman 获得响应 但在使用 Angular 的 http get 方法时 safari 会抛出此错误 这也将在生产中发挥作用 该错误仅在开发过程
  • mongodb-go-driver/bson 结构到 bson.Document 编码

    我正在与https github com mongodb mongo go driver https github com mongodb mongo go driver和 目前正在尝试实现此类结构的部分更新 type NoteUpdate
  • 为什么我的活动没有看到观察到的对象发生变化?

    我是 Android 开发新手 我正在尝试通过 MVVM 架构了解实时数据 我试图让主要活动识别出属于活动视图模型的对象何时发生变化 我创建了一个简单的登录活动 它从用户名和密码字段中获取文本并将它们传递给视图模型的登录函数 然后该函数将数
  • 将 UIImagePickerControllercameraOverlayView 放置在相机预览顶部

    我想向 UIImagePickerController 添加覆盖层 但我只需要它覆盖相机预览 而不是顶部或底部的相机控件 我找不到任何方法来做到这一点 因为每个设备上的顶部 底部控件高度都不同 我之前在其他应用程序上看到过这样做 任何指导表
  • OpenCV Android - 将 MatOfPoint 转换为 Mat

    我想将使用 Imgproc findContours 找到的 MatOfPoint 转换为 二进制 Mat 我知道有一种方法可以进行反向转换 只需使用构造函数 MatOfPoint Mat m 但是是否有内置方法可以进行此转换 如果不是 逐
  • 如何使用 VS2019 解决此 MSB6006 csc.exe 错误 (-2146232797)?

    我刚刚将 VS2019 社区版更新到版本 16 7 2 我的项目开始无法构建 可能是链接步骤 并出现此错误 之前构建得很好 我认为是在 v16 6 something 上 gt Severity Code Description Proje
  • 为jqgrid的每一列添加过滤器

    我有一个jqgrid显示员工的详细信息 我想在每一列中添加一个过滤器 用户可以使用该过滤器输入公司名称 网格显示与网格中的过滤器匹配的所有员工行 谷歌搜索了很多但没有成功 任何参考示例 链接都会有帮助 当您在文本框中键入测试用例的名称时 您
  • 单元格pyqt中的小部件对齐

    我正在 PyQT4 和 Python 2 7 中开发一些工具 但遇到了一个小问题 我有 3 个按钮存储在小部件中 该小部件位于表格 QTableWidget 的单元格中 所以我的问题是我无法将小部件与单元格顶部对齐 并且工具无法将行高调整为
  • 如何遵循 powershell 中的快捷方式

    在 powershell 中 您使用cd dir进入目录dir But if dir是目录的快捷方式 cd dir and cd dir lnk两者都会给出错误 说该目录不存在 那么我该如何遵循这条捷径呢 在Linux中cd dir 正常工
  • 如何爆掉 yeoman index.html 缓存

    当我部署 Angular 应用程序的新版本时 旧版本仍然存在 只是 修复的解决方法是对浏览器进行 硬 刷新 这不是一个可接受的解决方案 我在我的项目中使用 Yeoman 生成器角度 我看了看Gruntfile js并看到它执行了一个在构建期
  • 如何通过 stackexchange api 调用检索 stackoverflow 标签使用计数?

    我想通过 StackExchange API 检索 Ruby 或 Java 等语言的 标签使用计数 基本上我想通过 API 调用检索这些数字 https stackoverflow com tags https stackoverflow
  • 检测是否只给出整数的程序是否进入无限循环

    program to detect whether only integer has been given or not int main int a b s printf Enter two proper number n BEGIN s
  • 如何在 Azure 虚拟机中伪造 OpenGL?

    我想在我的 Azure VM Windows Server 2008 中运行一些需要 OpenGL 2 0 的程序 然而 虚拟机没有视频硬件 我如何才能让程序相信我有足够好的视频卡 如果我没有虚拟显卡 我该如何在云中进行所有开发呢 您可以放
  • Mongo / Mongoose 聚合 - $redact 和 $cond 问题

    我很幸运能够得到另一个SO问题的精彩答案Mongo Mongoose 按日期聚合 https stackoverflow com questions 43864813 mongo mongoose aggregating by date来自
  • 静态多态性定义和实现[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对这个概念有一些疑问静态多态性我有时听说 您可能主要在 C 上下文中解释它们 但我希望在适用的情况下提供与语言无关的答案 因此标记