我有一个问题。 cpp / qt语言可以执行以下操作吗?
1)从文本文件中读取,例如template.txt
struct messageA
{
variableA int 0
variableB string abc
variableC double 1.0
}
struct msgB
{ variableD int 0 variableE字节255 variableF unsignedInt 123
} // ...等等
2)根据template.txt的详细信息,生成一个将相应地创建变量和数据类型的类?
我对如何从文本文件中读取内容并存储详细信息有一个大概的想法,但我有问题想出如何根据我收到的数据创建类的想法。
任何提示/提示都会很棒!谢谢!
答案 0 :(得分:0)
在python中,你可以在运行时创建类; c ++是一种编译语言。您可以通过读取文件创建源文件并进行编译。这种技术也被Qt的moc创作者使用。如果您希望在运行环境中包含类,则可以使用类构建共享库并加载库。还有this问题。
答案 1 :(得分:0)
正如user3755692已经提到的,您无法在运行时创建类。但是,如果您真的绝望地想要动态创建具有不同字段和方法的某些对象,您可以尝试component-based design。它真的很有效,但有时很难实现,接近。
就像你有一个虚拟对象,它只是组件的容器,如下所示:
class BaseObject
{
public:
void addComponent(IComponent* component);
Icomponent* getComponent();
void executeComponent(int id);
void updateAllComponents();
private:
vector<IComponent*> _components;
};
您有从IComponent
接口继承的各种组件(提供了一些基本功能和纯虚方法),您可以将它们添加到基础对象中。
组件可以是任何东西:
// Component that stores int value
class IntComponent : public IComponent
{
public:
// This is something inherited from IComponent
virtual void init()
{
integerValue = 0;
}
public:
int integerValue;
};
// Component that allows you to print something in console
class PrintingComponent : public IComponent
{
public:
// This is something inherited from IComponent
virtual void init()
{
}
public:
void print(const char* phrase)
{
cout<<phrase<<endl;
}
};
您可以在基础对象中组合不同的组件以实现应得的功能。您可以使用某种配置文件创建此类对象。像简单的* .txt文件一样:
[OBJECT]
COMPONENT_INT,
COMPONENT_PRINT
[OBJECT]
COMPONENT_INT,
COMPONENT_FILEREADER
然后你将解析它并创建两个具有不同组件集的对象,然后可以在程序中使用它们。
这是关于这种方法的一些有用的文章:
1)http://www.randygaul.net/2013/05/20/component-based-engine-design/
2)http://gameprogrammingpatterns.com/component.html
3)Component based game engine design - 这里有很多有用的链接
上述文章主要关注gamedev,但有一个非常好的解释。 祝好运!