首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态多态性的定义与实现

静态多态性的定义与实现
EN

Stack Overflow用户
提问于 2010-12-29 19:23:22
回答 3查看 16.9K关注 0票数 28

我有一些关于静态多元主义概念的问题,我有些人听说过;您可能主要是在C++的上下文中解释它们,但如果适用的话,我会很感激语言不可知论的答案(因此C++和语言不可知论者都有标记)。

  1. 是如何定义静态多态性的?以为例,我认为C++的std::sort函数应该被认为是静态多态的,因为它依赖于某些类似迭代器的对象提供的接口,并且提供的迭代器的接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是仅仅是对一个特定案例的描述,还有更多呢?
  2. 在C++中使用静态多态性的常见代码模式是什么?另外: SP是否仅通过C++中的模板实现?
  3. 是真的吗?给定的类图并不直接描述如何处理多态性,因此至少可以部分地静态地或动态地实现它吗?换句话说:静态和动态多态的选择是否独立于OOP模型,从而由实现者来决定?
  4. 是静态多态,只有C++特有的,并且与模板的工作方式有关?如果没有,它是否存在于除C++之外的其他主流语言中?我们能不能在Java,C#中有一个等价的静态多态性。任何东西,它会带来什么好处吗?
  5. 最重要的是。使用静态多态性的实际好处是什么?我想我们可以同意,它降低了代码的灵活性;此外--在C++ --节省一个指针取消引用(虚拟函数/指针到函数/委托成本)的情况下,还有哪些优点?在类问题中,静态多态性特别有用,是实现的正确选择?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-29 19:39:07

  1. 静态多态行为是在编译时而不是在运行时发生的类型多态性
  2. 是。
  3. UML是关于类在运行时是如何交互的--我不认为有描述模板的UML格式,但我可能错了。
  4. 据我所知,它是特定于C++的,但我并不乐观,因为我从未使用过所有发明的语言。)也就是说,像C#和Java这样的JIT语言通常非常擅长消除间接调用在某些情况下使用运行时而不是编译时收集的信息对性能的影响。不过,不管这是在编译时还是在编译时进行.毕竟,它被称为“实时编译器”。
  5. 主要的好处是性能。运行时多态性可以完成静态多态性所能做的一切(事实上,它可以做更多的事情),但是它承担了间接调用的成本(如果有足够多的调用,这可能是昂贵的)。

现在,模板本身除了实现编译时多态之外还有许多用途--例如,使boost::bind工作的SFINAE魔力当然不是多态的--它只是为了平滑语言本身的不一致。

票数 14
EN

Stack Overflow用户

发布于 2010-12-29 19:35:20

一般如何定义静态多态性?

用例子来理解它的最好方法。基于策略的设计是静态多态的一个例子。在我看来,这是实现静态多态性的非常强大的技术。

另一个例子是奇怪的是反复出现的模板模式(CRTP),它也是一种强大的技术。

票数 6
EN

Stack Overflow用户

发布于 2014-10-21 08:13:29

  1. 不是的。除了模板,这种方法也是静态多态的。过载
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4557141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档