- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个用 C++ 编写的有点复杂的数学代码。我正在使用(模板化的)树结构来表示自适应函数。由于某些数学特性,我最终需要从一种类型的节点更改为另一种类型的节点。这需要透明地发生,并且在存储和性能方面的开销最小,因为这些结构用于非常繁重的计算。
详细情况如下:我有一个模板化的抽象基类,定义了一个通用的、双向链接的节点的通用数学和结构属性。除了跟踪其子节点之外,每个节点都需要来自其父节点和顶级 Tree 类的信息。有两个类继承自该类,FunctionNode 和 GenNode。这些类在存储和功能方面非常不同,并且不应该(至少是公共(public)的)彼此的祖先。因此,我想构造一棵这样的树:
T
N
/ \
N N
/ \
G N
/ \
G G
其中 T 是一个树,N 是一个普通的 FunctionNode,G 是一个 GenNode。问题是 N - G 转换:N 需要有 G 类型的子代,G 有 N 类型的父代。由于 N 和 G 只是堂兄弟而不是 sibling ,所以我无法将 N* 转换为 G*。 G 知道 N 是一个 BaseNode 就足够了,但是 N 必须以某种方式多态地存储 G,以便在遍历树时自动调用正确的虚函数。任何如何优雅有效地解决这个问题的想法将不胜感激! :) 当然,有人可以破解它,但由于这是一段非常基础的代码,我希望有一个好的解决方案。将来很可能会有很多此代码的派生。
最好的问候,
乔纳斯·朱塞利乌斯
特罗姆瑟大学理论与计算化学中心
最佳答案
可以委派的时候不要使用继承。请查看Strategy 设计模式以获得这方面的指导。
“N - G”转换可以通过 N (N_g) 的子类更好地处理,它是一元运算符(其他 N 是二元的),并将工作委托(delegate)给关联的 G 对象。 G 子树实际上是一个基于 G 而不是 N 的不相交类族。
T
N
/ \
N N
/ \
N_g N
|
G
/ \
G G
“其中一个问题是我事先不知道下一个 N 是 N 还是 N_g。”
“事先?”在什么之前?如果您正在创建 N,然后尝试确定它们是否应该是 N_g,那么您已经遗漏了几件事。
您在此过程中过早地实例化了 N。
您忘记编写一个通过复制 N 来工作的 N_g 构造函数。
您忘记编写一个 replace_N_with_Ng
方法来“克隆”一个 N 来创建一个 N_g,然后用 N_g 替换树中的原始 N。
多态性的要点是你不需要“事先”知道任何东西是什么。您应该等待尽可能长的时间来创建 N 或 N_g,并将生成的 N(或 N 的子类)对象绑定(bind)到树中。
“此外,有时我需要修剪所有 G:s,并生成更多 N:s,然后再生成更多 G:s。”
很好。您遍历树,用 N 个实例替换 N_g 个实例以“修剪”。您遍历树,用 N_g 替换 N 个实例,以生成新的/不同的 G 子树。
关于c++ - 具有不同节点类型的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612677/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!