我对静态多态性的概念有些疑问,我有些时候会听到;您可以主要在C ++的上下文中解释它们,但我会在适用的情况下欣赏与语言无关的答案(因此标记C ++和语言无关)。
我们如何定义一般的静态多态?作为一个例子,我相信来自C ++的std::sort
函数应该被认为是静态多态的因为它依赖于一些表现得像迭代器的对象提供的接口,并且在编译时可以确定所提供的迭代器接口下的精确行为。这是解释我们如何定义静态多态,或者它只是对特定案例的描述,还有更多内容吗?
在C ++中使用静态多态的常见代码模式是什么?另外:SP 仅通过C ++中的模板实现吗?
给定的UML类图是不是直接描述了如何处理多态,因此,它至少可以部分实现静态还是动态?换句话说:静态与动态多态的选择是否独立于OOP模型,因此由实现者来决定?
静态多态只是C ++特定的并且与模板的工作方式有关吗?如果没有,除了C ++之外,它是否存在于任何其他主流语言中?我们可以在Java,C#中拥有等效的静态多态性吗?任何东西,它会带来什么好处吗?
最重要的...... 使用静态多态的实际好处是什么?我认为我们可以同意它会降低代码的灵活性;有什么优点,除了 - 在C ++的情况下 - 保存一个指针解除引用(虚函数/指针到函数/委托成本)?什么是类问题,其中静态多态性特别有用,是实施的正确选择?
答案 0 :(得分:13)
现在,模板本身除了实现编译时多态之外还有许多用途 - 例如,使boost::bind
工作的SFINAE魔法肯定不是多态的 - 它仅仅是为了平滑语言本身的不一致性。
答案 1 :(得分:5)
我们如何定义静态多态性 总的来说?
使用示例了解它的最佳方式。 Policy Based Design是静态多态的一个例子。在我看来,这是实现静态多态的非常强大的技术。
另一个例子是Curiously recurring template pattern (CRTP),它也是一种强大的技术。
答案 2 :(得分:0)