首頁 > 後端開發 > C++ > 如何在 C 中正確序列化包含 std::string 的類別?

如何在 C 中正確序列化包含 std::string 的類別?

Barbara Streisand
發布: 2024-12-10 03:41:09
原創
624 人瀏覽過

How to Properly Serialize a Class Containing an std::string in C  ?

序列化包含std::string 的類別:理解指標困境

序列化是用於保存物件狀態的關鍵技術用於儲存或轉移。然而,由於 std::strings 的指標性質,序列化包含 std::strings 的類別會帶來挑戰。

嘗試透過將包含 std::string 的類別轉換為 char 來序列化包含 std::string 的類別時會出現此問題* 並將其寫入檔案。此方法適用於簡單資料類型,但不適用於 std::strings,因為它不考慮指標依賴性。

指標序列化的標準解決方法

要克服對於這個問題,標準的解決方法包括將序列化和反序列化方法引入到類別中。這些方法手動處理物件內部資料(包括指標)的寫入和讀取。

範例實作如下:

// Serialization method
std::ostream& MyClass::serialize(std::ostream &out) const {
    // Serialize numeric values using the output stream
    out << height;
    out << ',' // Separator
    out << width;
    out << ',' // Separator
    
    // Serialize the std::string
    out << name.size(); // String length
    out << ',' // Separator
    out << name; // String characters
    
    return out;
}

// Deserialization method
std::istream&amp; MyClass::deserialize(std::istream &amp;in) {
    if (in) {
        // Deserialize numeric values using the input stream
        int len=0;
        char comma;
        in >> height;
        in >> comma; // Separator
        in >> width;
        in >> comma; // Separator
        
        // Deserialize the std::string
        in >> len; // String length
        in >> comma; // Separator
        if (in &amp;&amp; len) {
            std::vector<char> tmp(len);
            in.read(tmp.data() , len); // String characters
            name.assign(tmp.data(), len);
        }
    }
    return in;
}
登入後複製

重載流運算子可以簡化這些運算子的使用方法:

std::ostream &amp;operator<<(std::ostream&amp; out, const MyClass &amp;obj)
{obj.serialize(out); return out;}
std::istream &amp;operator>>(std::istream&amp; in, MyClass &amp;obj)
{obj.deserialize(in); return in;}
登入後複製

透過使用這些技術,std:: strings 可以作為更大類別的一部分進行有效的序列化和反序列化,保留它們的完整性和指標依賴性。

以上是如何在 C 中正確序列化包含 std::string 的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板