从文本文件中读取消息结构并基于它生成类

时间:2014-08-03 15:12:20

标签: c++ qt

我有一个问题。 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的详细信息,生成一个将相应地创建变量和数据类型的类?

我对如何从文本文件中读取内容并存储详细信息有一个大概的想法,但我有问题想出如何根据我收到的数据创建类的想法。

任何提示/提示都会很棒!谢谢!

2 个答案:

答案 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,但有一个非常好的解释。 祝好运!