问题标签 [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 投票
3 回答
728 浏览

c++ - 是否可以使用 CRTP 在静态多态中模拟纯虚函数?

我正在尝试使用 CRTP 实现编译时多态性,并希望强制派生类实现该功能。

当前的实现是这样的。

在这个实现中,如果派生类没有实现,对函数的调用就会陷入死循环f()

如何强制派生类实现纯虚函数之类的功能?我尝试使用'static_assert',static_assert(&base::f != &Derived::f, "...")但它会生成一条错误消息,指出指向不同类的成员函数的两个成员函数指针不具有可比性。

0 投票
2 回答
591 浏览

c++ - 静态多态:如何定义接口?

下面是我理解的静态多态性的一个非常简单的例子。我不使用动态多态性的原因是我不想阻止 in 函数的内PROCESSORop

这个例子的问题是:没有明确定义 aPROCESSOR必须定义什么函数。如果缺少一个,你只会得到一个编译错误。我认为这是不好的风格。

它还有一个非常实际的缺点:IDE 的在线帮助当然不能向您显示该对象上可用的功能。

定义 a 的公共接口的好/官方方法是PROCESSOR什么?

0 投票
1 回答
96 浏览

c++ - 这是 C++ 中多态的正确场景吗?

这么多年后,我陷入了一种奇怪的困惑。我知道运行时多态性问题、虚函数和许多这些东西,但不能确定下面的代码示例:

考虑到我的问题上面的C++场景是:

  1. 我可以将这种情况称为多态性吗?
  2. 如果是,那么我可以将其称为静态/编译时多态性吗?
  3. 如果不是,那么我应该假设这是一个不正确的实现并且必须使用 virtual 吗?

提前致谢!

0 投票
2 回答
947 浏览

java - java:从具有多态性的未知类调用静态方法

我有超类Token和一些子类Knight,如King, Queen, 等。

我需要一个随机Token类型,所以我称之为这个方法:

现在我想在这个tokenType上调用一个静态方法,例如:

编译器无法解析此方法,即使它在Token其及其所有子类中实现也是如此。

我的错误是什么?

0 投票
1 回答
215 浏览

c++ - 使用字符串选择模板类的特化

我有几种使用策略创建的类型,即

现在我想介绍一些机制,它允许我根据来自例如命令行的输入优雅地选择应该使用哪个 SpecializedType。理想情况下,这将是一个创建适当类型对象的工厂方法,例如:

我会很感激任何建议。谢谢!

0 投票
5 回答
1649 浏览

c++ - C++ 中的静态鸭子类型

对于模板参数给定的类型,C++ 有某种类型的鸭子类型。我们不知道类型DUCK1DUCK2将是什么,但只要它们可以quack(),它将编译并运行:

但是写起来有点不方便。当我完全不关心实际类型是什么DUCK1DUCK2而是想充分利用鸭子类型的想法时,我想要一些与上面略有不同的东西:

  1. 我想省略编写一个重复且几乎没有意义的模板参数列表(想象一下如果有 7 只鸭子会发生什么......)
  2. 我想更明确一点,从不使用类型,并且只有接口才是重要的。
  3. 我想要某种接口注释/检查。以某种方式明确类型背后的预期接口。(然而,这与鸭子打字有点不同。)

C++ 是否提供任何功能来实现这 3 个想法中的一个或多个?

(我知道在大多数情况下,虚拟继承是实现此类模式的首选方法,但这里的问题专门针对静态多态的情况。)

0 投票
3 回答
1150 浏览

c++ - 将静态访问者与静态多态层次结构耦合

我的程序的目的是创建一个数据列表,在我的类层次结构中使用静态多态性时,我可以使用一组静态访问者访问该列表。

我通过 CRTP 创建了一个利用静态多态性的类层次结构:

我想将 DerivedBaseData 存储在一个包含中,以便以后迭代和访问。

我正在寻找一种将我的静态访问者与我的静态多态层次结构相结合的方法。我的静态多态性中需要一个 VirtualBaseData 类,它不是模板类,以便在容器中使用这些类。但是,由于我不能让 VirtualBaseData 类成为模板类,因此我无法像在 CRTPattern 中那样为派生类创建适当的 static_cast。

我的问题是:有没有人有一个好的策略可以保留我的静态多态设置以及静态访问者模式?

供参考:我已经按照http://hillside.net/plop/2006/Papers/Library/portableProgrammingPL.pdf第 21-23 页中的描述实现了我的静态访问者

0 投票
2 回答
247 浏览

c++ - c ++静态多态性/ CRTP,带有访问基类成员的附加模板参数

我想使用CRTP实现静态多态性,并向模板参数添加其他类型。

提供以下场景,如何直接从 Derived 类访问 Base 成员?是否可以不指定 Base 类的完整类型?

g++5.3.1 / clang++3.8.0 输出:

0 投票
1 回答
61 浏览

templates - 如何设计以下类型的模板化类?

这个问题是在一次采访中问我的。我仍在寻找这个问题的解决方案。

以下两种类型的函数(两者或一种)可以存在于具体类中:

  1. /li>
  2. /li>

我们的目标是设计一个PrettyPrint支持这两种实现的模板类。

PrettyPrint在我写的优先级中使用具体类的函数:如果两者都存在,则使用第一个,否则使用第二个。

0 投票
2 回答
165 浏览

c++ - C++ 中方法和对象选择的静态多态性

试图在没有基类和虚拟调用的情况下获得编译时方法和对象选择。

情况如下:

http://coliru.stacked-crooked.com/a/4b5acec6866cfd4e

假设像 A 和 B 这样的类很少,但可能有很多像 f1 和 f2 这样的函数。

持有者需要在它持有的实际对象上调用函数,没有多态性,也不需要 A 和 B 的继承/共享接口。

寻找一种好方法来做类似的事情:

任何想法?

  • 宏?
  • 模板?
  • 其他技巧?