我对这个概念有一些疑问静态多态性我有时听说;您可能主要在 C++ 上下文中解释它们,但我希望在适用的情况下提供与语言无关的答案(因此标记 C++ 和语言无关的).
我们如何define一般静态多态性?举个例子,我相信std::sort
C++ 中的函数应被视为静态多态,因为它依赖于某些对象提供的某些接口表现得像迭代器,以及提供的迭代器接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是只是对特定情况的描述,还有更多内容?
常见的代码模式有哪些在C++中使用静态多态性?另外:是SPonly通过C++中的模板实现?
是不是真的给定的 UML 类图没有directly描述多态性是如何处理的,因此,它至少可以部分地静态或动态地实现?换句话说:静态多态性与动态多态性的选择是否独立于 OOP 模型,从而由实现者决定?
静态多态性只是 C++ 特有的吗以及与模板如何工作相关?如果没有,它是否存在于其他任何主流语言除了C++?我们可以在 Java、C# 等中拥有相当于静态多态性的东西吗?它会带来什么好处吗?
最重要的是...使用静态多态性有什么实际好处?我认为我们可以同意它降低了代码的灵活性;除了 - 在 C++ 的情况下 - 节省一个指针取消引用(虚拟函数/函数指针/委托成本)之外,还有什么优点?是什么问题类别静态多态性在哪里特别有用,实现的正确选择是什么?
- 静态多态行为是类型多态性 http://en.wikipedia.org/wiki/Type_polymorphism这发生在编译时而不是运行时。
- Yes.
- UML 是关于类在运行时如何交互的——我不相信有用于描述模板的 UML 格式,但我可能是错的。
- 据我所知,它是 C++ 特定的,但考虑到我没有使用过所有发明的语言,我对此并不肯定。 :) 也就是说,在某些情况下,使用运行时而不是编译时收集的信息,C# 和 Java 等 JIT 语言通常非常擅长消除间接调用对性能的影响。不管这是否是在编译时,都还没有定论……毕竟,它被称为“即时”Compiler.
- 主要好处就是性能。运行时多态性可以做静态多态性可以做的所有事情(事实上它可以做更多),但它会带来间接调用的成本(如果有足够多的间接调用,这可能会很昂贵)
现在,模板本身除了实现编译时多态性之外还有许多用途——例如 SFINAE 魔法,它使得boost::bind
work 当然不是多态的——它只是为了消除语言本身的不一致。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)