Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态多态性的定义和实现_C++_Design Patterns_Language Agnostic_Static Polymorphism - Fatal编程技术网

C++ 静态多态性的定义和实现

C++ 静态多态性的定义和实现,c++,design-patterns,language-agnostic,static-polymorphism,C++,Design Patterns,Language Agnostic,Static Polymorphism,我有一些关于静态多元论的问题,我有时听说过;你可以在C++的上下文中对它们进行解释,但是我会欣赏语言不可知的答案,因为它们是适用的(因此C++和语言无关)。 L> > P>强>一般如何定义静态多态性?作为一个例子,我相信C++中的 STD::排序函数应该被认为是静态多态的,这取决于一些对象的接口,这些对象的行为类似于迭代器,并且,在所提供的迭代器接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是仅仅是对特定情况的描述,还有更多 在C++中使用静态多态性的常见代码模式< /

我有一些关于静态多元论的问题,我有时听说过;你可以在C++的上下文中对它们进行解释,但是我会欣赏语言不可知的答案,因为它们是适用的(因此C++和语言无关)。 <> L> > P>强>一般如何定义静态多态性?作为一个例子,我相信C++中的<代码> STD::排序函数应该被认为是静态多态的,这取决于一些对象的接口,这些对象的行为类似于迭代器,并且,在所提供的迭代器接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是仅仅是对特定情况的描述,还有更多

在C++中使用静态多态性的常见代码模式< /强>是什么?另外,SP是通过C++中的模板实现的吗?p>
  • 一个给定的UML类图并没有直接描述多态性是如何处理的,因此,它至少可以部分地静态或动态实现,这是真的吗?换句话说:静态多态性与动态多态性的选择是否独立于OOP模型,从而由实现者决定

  • 静态多态性是否只是C++特有的,并且与模板的工作方式有关?如果不是,除了C++之外,它是否存在于任何其他主流语言中?我们能在Java中有一个等价的静态多态性吗。。什么都可以,它会带来什么好处

  • 最重要的是使用静态多态性的实际好处是什么?我认为我们可以同意,它降低了代码的灵活性;此外,在C++中保存一个指针引用(虚拟函数/指针到函数/委托成本)的优点是什么?静态多态性特别有用的类问题是什么,是实现的正确选择

  • 我们如何定义静态多态性 一般来说

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

    另一个例子是,这也是一种强大的技术

  • 静态多态行为发生在编译时而不是运行时
  • UML是关于类在运行时如何交互的——我不相信有UML格式来描述模板,但我可能错了
  • 据我所知,它是C++特定的,但我不积极,因为我没有使用过的每种语言都有发明。也就是说,像C#和Java这样的JIT语言通常非常擅长消除间接调用的性能影响,在某些情况下,使用在运行时而不是编译时收集的信息。不管这是不是在编译时,都有点悬而未决。。。毕竟,它被称为即时编译器
  • 主要的好处就是性能。运行时多态性可以做静态多态性所能做的一切(事实上,它可以做得更多),但它带来了间接调用的成本(如果有足够的间接调用,那么间接调用的成本可能会很高)
  • 现在,除了实现编译时多态性之外,模板本身还有许多用途——例如,使
    boost::bind
    工作的SFINAE魔法肯定不是多态的——它只是为了消除语言本身的不一致性

  • 不是。除了模板,加载方法也是静态多态性。

  • 我们可以同意,它降低了代码的灵活性??我想他指的是“复杂性”或者可能是“冗余”。不,我指的是灵活性;假设所有具有静态多态性的设计都可以通过动态多态性来实现,但不是以相反的方式实现——在特定情况下使用静态多态性意味着,如果需求发生变化,将来可能需要动态重写它。这只是我的想法,但它的工作方式也是相反的:您可能还需要采取另一种方式(例如,保存类型信息)。我认为大多数人会认为<代码> STD::向量比java一般向量的通用和无用的<代码>对象< /Case>基类更灵活。“2。是的。”函数重载是什么?”查尔斯:我从来没有听到过任何人在调用“静态多态”之前(虽然我认为它适合)。这取决于你如何回答(1),当然。@Charles:嗯,在1中我明确地说“类型多态性”只是出于这个原因(而不是一般情况)。