关于实体组件范例

时间:2017-12-18 16:34:35

标签: c++ paradigms

我做了一点import os import pandas as pd import rpy2.robjects as robjects from rpy2.robjects import pandas2ri from rpy2.robjects.packages import importr pandas2ri.activate() base = importr('base') base.load("datafile.rda") rdf_List = base.mget(base.ls()) # ITERATE THROUGH LIST OF R DFs pydf_dict = {} for i,f in enumerate(base.names(rdf_List)): pydf_dict[f] = pandas2ri.ri2py_dataframe(rdf_List[i]) for k,v in pydf_dict.items(): print(v.head()) ,在编程活动中,我遇到了一些我试图解释的困难。 我有两层(IDE个文件),一个用于更低级别的实体(实体本身,向量等),另一个用于更高级别(cpp级别,如按钮等)。

IDE

中的

entities.h
struct EntityComponent{ }; struct a_component : EntityComponent{ //cannot change this }; struct Entity{ ... //entity data like childs, parent, transforms, and so on std::vector<EntityComponent*> components; };

中的

ide.h

现在我希望每个实体和每个组件都获取指向ide.h层中声明的更高类型的指针,例如绘制实体或组件数据的gui元素,所以我做了:

struct GuiButton{...}; struct GuiProperty{...};

中的

ide.h

我可以在struct EditorEntity : Entity{ GuiProperty* properties; }; struct EditorEntityComponent: EntityComponent{ GuiProperty* properties; }; 中使用EditorEntity代替实体并使用属性。 当我想对IDE结构做同样的事情时会出现问题:低层中的每个组件都被声明为继承此EntityComponent结构,因此我无法更改此值,因为在每个组件定义中都会静态声明。

我需要EntityComponentEditorEntityComponent,其中包含更高级别的属性,但我不想在EntityComponent repr中放置一个丑陋的指针。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您正在谈论“复合”设计模式https://en.wikipedia.org/wiki/Composite_pattern

着名书籍“设计模式”(Gamma,Helm,Johnson和Vlissides)中的例子实际上是一个gui编辑器,正是你试图用它来做的。如果你能掌握这一点,请阅读该章。

即使遵循众所周知的指导方针,仍有许多方法可以做。以下完全是我自己的看法:

您所犯的错误是尝试使用打字系统来控制哪些组件可以附加到其他组件。但是,为了方便和可靠,有一个树的层次结构需要从上到下相同。

相反,您可以通过赋予其创建这些组件的责任来控制每个类下允许的组件。如果您的实体编辑器创建了每个实体编辑器组件,那么其他任何类都不能为它分配错误的类型。