سریالایز کردن وکتوری از اشاره گر هوشمند با nlohmann::json - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سریالایز کردن وکتوری از اشاره گر هوشمند با nlohmann::json

+1 امتیاز

سلام.

من برای سریالایز کردن vector<T> مشکلی ندارم ولی اگر shared_ptr<T> استفاده کنم خطا میده.

class VariR {
public:
    VariR(){}
    VariR(int id,const std::string& title,int group):
        id_{id},

        title_{ title },
        group_{ group }{

    }
    int id_;
    
    std::string title_;
    int group_;
    void print() {
        cout << "id:" << id_ << endl;
        
        cout << "title:" << title_ << endl;
        cout << "group:" << group_ << endl;

    }
};

using VariRP = std::shared_ptr< VariR>;


void to_json(json& j, const VariR& p)
{
    j = { {"id", p.id_}, {"region", p.region_} , {"title", p.title_}, {"group", p.group_} };
}
void from_json(const json& j, VariR& p)
{
    j.at("id").get_to(p.id_);

    j.at("title").get_to(p.title_);
    j.at("group").get_to(p.group_);

}




template<typename T>
class Model1 {
public:
    using TP = std::shared_ptr<T>;
    using TPS = std::vector<TP>;
    using TS = std::vector<T>;

    TPS items_;
    void print() {
        cout << "model items:" << endl;
        for (auto item : items_)
            item->print();

    }
};

using VariModel = Model1<VariR>;




        static inline void to_json(json& j, const VariModel& p)
        {
            j = { {"vari_model", p.items_} };
        }

        static inline void from_json(const json& j, VariModel& p)
        {
            j.at("vari_model").get_to(p.items_);
        }

 

سوال شده آبان 21, 1400  بوسیله ی Oscar (امتیاز 127)   8 25 29

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

شما باید to_json و from_json را برای shared_ptr هم بازنویسی کنید


void to_json(json& j, const VariRP& p)
{
    j = *p;
}
void from_json(const json& j, VariRP& p)
{
    p.reset(new VariR(j.get<VariR>()));
    *p = j;
}

 

پاسخ داده شده آبان 21, 1400 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد بهمن 6, 1401 بوسیله ی مصطفی ساتکی
...