我想解析一个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;
答案 0 :(得分:0)
您可以使用变体(http://en.cppreference.com/w/cpp/utility/variant或http://www.boost.org/doc/libs/1_64_0/doc/html/variant.html)
或通过设置类型整数来手动跟踪类型。然后,您可以根据std::vector<Message*> messages;
dynamic_cast
(基类的poiters向量)和Message::type
到适当的类型