问题标签 [static-polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1119 浏览

c++ - C++ 是否有不使用 vtable 的接口的静态多态实现?

C++ 是否具有不使用 vtable 的接口的正确实现?

例如

最后一行对 func 的调用转到 vtable 以查找 BaseInterfaceImpl::func 的 func ptr,但是是否有任何 C++ 方法可以直接执行此操作,因为除了纯接口类 BaseInterface 之外,BaseInterfaceImpl 不是任何其他类的子类?

谢谢。吉尔。

0 投票
3 回答
2983 浏览

c++ - 派生类作为模板参数有什么用?

这种模式的目的是什么?这叫什么?我第一次看到它时看起来很奇怪,虽然我现在已经看过很多次了。

0 投票
4 回答
3687 浏览

php - PHP:多态抽象静态方法

我正在尝试做这样的事情,但我没有成功。

谢谢!

0 投票
3 回答
16662 浏览

c++ - 静态多态性定义与实现

我对我听说过的静态多态概念有一些疑问;您可能主要在 C++ 的上下文中解释它们,但我希望在适用的情况下使用与语言无关的答案(因此标记 C++ 和与语言无关的)。

  1. 我们一般如何定义静态多态性?例如,我认为std::sortC++ 中的函数应该被认为是静态多态的,因为它依赖于某些对象提供的某些接口,这些对象的行为类似于 iterators,并且提供的迭代器接口下的确切行为可以在编译时确定。这是我们如何定义静态多态性的解释,还是只是对特定情况的描述并且还有更多内容?

  2. 在 C++ 中使用静态多态的常见代码模式是什么?另外:SP 是否只能通过 C++ 中的模板实现?

  3. 给定的 UML 类图是否确实没有直接描述如何处理多态性,因此它至少可以部分地静态或动态地实现?换句话说:静态与动态多态性的选择是否独立于 OOP 模型,因此由实现者决定?

  4. 静态多态性只是 C++ 特定的并且与模板的工作方式有关吗?如果没有,它是否存在于除 C++ 之外的任何其他主流语言中?我们可以在 Java、C# 中拥有等价的静态多态性吗?它会带来什么好处吗?

  5. 最重要的......使用静态多态的实际好处是什么?我认为我们可以同意它降低了代码的灵活性;除了 - 在 C++ 的情况下 - 节省一个指针取消引用(虚拟函数/指向函数的指针/委托成本)之外,还有什么优势?静态多态性特别有用的问题是哪类问题,是实现的正确选择?

0 投票
5 回答
2346 浏览

list - 为什么haskell没有异构列表

我不明白为什么我不能构建一个看起来像[1,"1",1.1]haskell 的列表。我不认为是静态类型会妨碍我,因为我认为现在会有一个定义错误的类型,但后来我想到了,运行时head系统没有理由不实例化一个不同的版本headlist 被输入它,因此head [1,"1",1.1]将被输入为List->Int并且head (tail [1,"1",1.1])将被输入为List->String. 既然运行时已经做了很多记账,为什么它不提供各种前奏函数的更高级的多态(或者它是通用的)版本?我在这里想念什么?

0 投票
3 回答
405 浏览

c++ - 静态模板类的建议

我有这个问题(直方图)。我有一个真实的空间:[a,b]以某种方式分区([a0=a, a1, a2, ..., b])。分区可以是相等的空间 ( a1 - a0 = a2 - a1 = ...) 或变量。

我需要一个处理这个问题的类,用一些方法说给定它所属的分区的 bin 的值;查找特定垃圾箱中心的其他方法等等。

在程序中,我不喜欢实例化一个类,只是为了调用这些简单的函数,比如

所以我尝试使用模板编写一个静态类来做这样的事情:

这是个好主意吗?还有其他方法吗?现在我有免费的功能,比如

但我认为这太容易出错了。

这是我的实现:

  1. 这是一个好的实现/设计吗?
  2. 有没有办法避免n使用该领域std::vector?如何?
  3. 有没有办法参数化0.025?我知道这double不能是模板参数,但我可以写类似这样的东西:

    /li>
  4. 其他/建议?

编辑:

第三点为什么我不能这样做:

0 投票
2 回答
856 浏览

c++ - 是否有一种通用方法可以将函数模板改编为多态函数对象?

我有一些功能模板,例如

我需要将每一个传递给一个算法,该算法将以各种类型调用它,例如

我不能未经实例化传入我的函数模板,但我也不能用任何特定类型实例化它,因为some_algorithm需要用几种不同类型的参数调用它。

我可以将我的函数模板调整为多态函数对象,例如

然后将其作为some_algorithm(foo_polymorphic()). 但这需要为我的每个函数模板编写一个单独的适配器。

是否有一种通用方法可以将函数模板调整为多态函数对象,即我可以为需要调整的每个函数模板重复使用某种机制,而不必为每个函数模板单独声明一些东西?

0 投票
2 回答
801 浏览

c++ - 返回对 this 和继承的引用

对于某些语法糖,我想返回对 的引用this,但是在继承时,该函数应返回子类的类型:

由于操作员,我不能只返回指针和 dynamic_cast 它,它必须是一个引用。

这甚至可能吗?使用decltype(*this)for T 不起作用,也不起作用auto f()->decltype(*this),因为this(虽然我不明白为什么,在自动情况下)

在 Scala 中,您可以编写如下内容:

但是我的 g++ 不会接受这个(不确定这是错误还是不在规范中?)

当然有明确的方式,但我想知道是否可以使用 C++11 特性来避免这种情况?

0 投票
4 回答
214 浏览

scala - Scala 类型推断没有注意到这些类型是相同的,无论它们是什么

我在这里有一个设计模式,其中有一个对象生成器(MorselGenerator 及其子代),其任何实例总是生成相同类型的对象(Morsels 及其子代),但类型检查器不会让我执行任何操作这些生成的对象中的两个或多个,相信它们可能不同。

我如何通过类型检查器?

编译器生成以下编译错误


更新

这是或多或少等同于我正在尝试做的 C++ 代码。请注意,eatTwo 函数是完全多态的,并且不引用 Morsel 或 MorselGenerator 的特定派生类型。

0 投票
1 回答
155 浏览

design-patterns - 为什么 AbstractFactoryUnit 具有动态而不是静态多态性?

我目前正在学习现代 c++ 并专注于抽象工厂,据我了解,Loki 的主要思想之一是避免 GoF 中使用的“虚拟”(动态多态)。但有时,它仍然被使用。在关于抽象工厂的一章中,AbstractFactoryUnit 具有“虚拟”。http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markup从我目前阅读的内容来看,有很多方法可以绕过它。http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism

为什么在这种情况下使用 virtual 更有效?