c – 静态多态定义和实现
作者:互联网
关于静态多态性的概念我有些疑问,我有些时候会听到;你可能主要在C的语境中解释它们,但我会欣赏适用的语言无关的答案(因此标记C和语言不可知).
>我们如何定义静态多态?作为一个例子,我认为来自C的std :: sort函数应该被认为是静态多态的,因为它依赖于一些行为像迭代器一样提供的接口,并且在所提供的迭代器的接口下的确切行为可以在编译时间.这是解释我们如何定义静态多态,或者它只是对特定案例的描述,还有更多内容吗?
>在C中使用静态多态的常见代码模式有哪些?另外:SP是否仅通过C中的模板实现?
>给定的UML类图是否真的不能直接描述多态性的处理方式,因此,它可以至少部分地以静态或动态方式实现?换句话说:静态与动态多态的选择是否独立于OOP模型,因此由实现者决定?
>静态多态只是C特定的并且与模板的工作方式有关吗?如果不是,它是否存在于C以外的任何其他主流语言中?我们可以在Java,C#中拥有等效的静态多态性吗?任何东西,它会带来什么好处吗?
>最重要的……使用静态多态性有哪些实际好处?我认为我们可以同意这会降低代码的灵活性;有什么优点,除了 – 在C的情况下 – 保存一个指针解除引用(虚函数/指针到函数/委托成本)?什么是静态多态性特别有用的问题类,是实现的正确选择?
解决方法:
>静态多态行为是type polymorphism,它发生在编译时而不是运行时.
>是的.
> UML是关于类在运行时如何交互的 – 我不相信有用于描述模板的UML格式,但我可能是错的.
>据我所知,这是C特定的,但鉴于我没有使用过所有发明过的语言,我并不乐观. :)尽管如此,JIT的语言如C#和Java在某些情况下使用在运行时收集的信息而不是在编译时通常非常擅长消除间接调用的性能影响.无论是在编译时还是在编辑时,它都有点直播……毕竟,它被称为即时编译器.
>主要好处是简单的表现.运行时多态可以做静态多态可以做的所有事情(事实上它可以做更多),但是它带有间接调用的成本(如果有足够的话,这可能很昂贵)
现在,模板本身除了实现编译时多态之外还有许多用途 – 例如,使boost :: bind工作的SFINAE魔法肯定不是多态的 – 它仅仅是为了平滑语言本身的不一致性.
标签:c,language-agnostic,design-patterns,static-polymorphism 来源: https://codeday.me/bug/20190923/1815159.html