如何实现将类型作为参数并返回包含字段名称及其值的字符串的序列化器?
我想得到这样的东西: 假设我有一个Person类:
class Person
{
public:
Person(string name, int age, double weight) :
_name(name),
_age(age),
_weight(weight){}
private:
string _name;
int _age;
double _weight;
}
所以我希望实现一个可以像这样使用的序列化器:
int main()
{
Person john("john", 31, 75.0);
string json = Serializer::serialize<Person>(john);
std::cout << json << std::endl;
}
输出将是:
{"_name": "john", "_age": 31, "_weight": 75.0}
到目前为止,我已经实现了一个抽象类的解决方案:
class Jsonable
{
public:
virtual string toJson() = 0;
}
class Person : public Jsonable
{
public:
Person(string name, int age, double weight) :
_name(name),
_age(age),
_weight(weight){}
string toJson() override
{
return "{\"_name\": " + _name + ", \"_age\": " + std::to_string(_age) +
", \"_weight\": " + _std::to_string(_weight) + "}"
}
private:
string _name;
int _age;
double _weight;
}
但是这种解决方案并不通用,如果我将新字段插入类,则必须更新“ toJson”方法,感觉不对。
c#和java具有反射选项,但就我所读的c ++而言,却没有。
有解决方案吗?或者也许是如何概括当前的?