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