将包含一组不同数据成员的json文件表示为C ++类

时间:2017-07-11 14:59:03

标签: c++ oop c++11 design-patterns

我想解析一个json文件,其中一些元素每次都是常见的,而另一些则根据类型而不同。 例如,消息json:

{
    "title": string,
    "body": string,
    "type": int (0 for email, 1 for sms, 2 for terminal)
    "typeProperties": {
        // Different based on type value
    }
}

我应该使用继承来表示json到C ++吗?我应该使用工厂方法每次实例化相应的类吗?有没有其他推荐的方法呢?

class Message {
public:
   std::string title;
   std::string body;
   int type; // 0 - Email, 1 - SMS, 2 - Terminal
};

class Email : public Message {
public:
  std::vector<std::string> emailRecipients;
  std::vector<std::string> emailCC;
};

class Sms : public Message {
public:
  std::string  phoneNumber; 
};

class Terminal : public Message {
public:
  int terminalId;
};

我可以使用基类对象的容器,并以某种方式根据类型访问特定的数据成员吗?

std::vector<Message> messages;

1 个答案:

答案 0 :(得分:0)

您可以使用变体(http://en.cppreference.com/w/cpp/utility/varianthttp://www.boost.org/doc/libs/1_64_0/doc/html/variant.html

或通过设置类型整数来手动跟踪类型。然后,您可以根据std::vector<Message*> messages;

的值声明dynamic_cast(基类的poiters向量)和Message::type到适当的类型