期货量化软件:赫兹量化将图形集成到函数库对象之中
改进库类
函数库对象所创建的每个图形对象都应意识到这一点。 当然,如果我们只有单一对象能够为自己创建图形对象(目前,这是一个柱线对象),那么新创建的图形对象不需要知道自己是由哪个对象创建的。 但如果每个函数库对象都能够为自己创建图形对象,那么所有创建的图形对象都应该知道它们是由哪个对象在内部创建的,以便可以引用其创建者,并从中获取数据。 这对于在图形对象上显示数据,或在不同对象之间实现更复杂的关系非常有用。
当然,不可能在一篇文章中完成所有这些事情。 我将从最简单的事情开始。 我们需要知道创建图形对象的对象类型的描述。 为达此目的,我们利用对象集合 ID(为每个对象设置一个对象类型对应的集合的 ID)。 ID 允许我们定义函数库对象(图形对象的创建者)所属的对象类型。 当然,这对于特定对象的准确表达是不够的。 但正如我已经说过的,我会从简单的事情开始。
此外,我们还需要为所有之前创建的函数库对象加入显示相应类型的对象描述的方法。 这是 Print() 和 PrintShort() 方法,用于显示对象属性的完整说明和简述。 我们将这些方法虚拟化,并在所有 CBaseObj 函数库对象的父类中声明它们。 为了虚拟化工作,我们需要令这些方法的参数在所有类中完全相同。 此刻,我们在不同的类中为这些方法设置了不同的参数。 有必要将它们变成单一形式,并根据经过修改的方法参数,更正方法调用。
采用必要的参数声明两个虚拟方法:
//--- Return an object type virtual int Type(void) const { return this.m_type; } //--- Display the description of the object properties in the journal (full_prop=true - all properties, false - supported ones only - implemented in descendant classes) virtual void Print(const bool full_prop=false,const bool dash=false) { return; } //--- Display a short description of the object in the journal virtual void PrintShort(const bool dash=false,const bool symbol=false){ return; } //--- Constructor