Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mensiri Kelas dengan Elegan ke Strim dalam C Menggunakan Corak Kilang?

Bagaimana untuk Mensiri Kelas dengan Elegan ke Strim dalam C Menggunakan Corak Kilang?

Linda Hamilton
Lepaskan: 2024-10-29 02:45:29
asal
950 orang telah melayarinya

How to Elegantly Serialize Classes to a Stream in C   Using the Factory Pattern?

Pensiran ke Strim untuk Kelas Dinyahmiskinkan

Apabila berhadapan dengan keperluan untuk pensirilan objek dalam C , ramai yang menggunakan corak biasa yang melibatkan penukaran berasaskan ID kelas :

<code class="cpp">class Serializable {
  public:
    static Serializable *deserialize(istream &amp;is) {
        int id;
        is >> id;
        switch(id) {
          case EXAMPLE_ID:
            return new ExampleClass(is);
          //...
        }
    }

    void serialize(ostream &amp;os) {
        os << getClassID();
        serializeMe(os);
    }

  protected:
    int getClassID()=0;
    void serializeMe(ostream &amp;os)=0;
};
Salin selepas log masuk

Walaupun pendekatan ini kelihatan intuitif, ia mengalami masalah yang berpotensi:

Pendekatan Corak Kilang

Lebih elegan dan boleh diperluaskan penyelesaiannya ialah menggunakan corak kilang. Daripada bergantung pada ID kelas, kelas kilang mencipta objek berdasarkan set pasangan fungsi kunci berdaftar. Fungsi mengembalikan tika kelas yang sepadan.

<code class="cpp">template<typename K, typename T>
class Factory {
    typedef T *(*CreateObjectFunc)();
    std::map<K, CreateObjectFunc> mObjectCreator;

    template<typename S> 
    static T* createObject(){ 
        return new S(); 
    }

    template<typename S> 
    void registerClass(K id){ 
        mObjectCreator.insert( std::make_pair<K,CreateObjectFunc>(id, &createObject<S> ) ); 
    }

    T* createObject(K id){
        typename std::map<K, CreateObjectFunc>::iterator iter = mObjectCreator.find(id); 
        if (iter == mObjectCreator.end()){ 
            return NULL;
        }
        return ((*iter).second)();
    }
};</code>
Salin selepas log masuk

Dalam pelaksanaan ini, setiap kelas minat didaftarkan dengan kilang, mengaitkan ID kelasnya dengan fungsi penciptaan. Apabila objek hendak dinyahsiri, kilang ditanya untuk ID kelas yang sepadan. Jika ditemui, fungsi penciptaan digunakan untuk membuat instantiate objek.

Atas ialah kandungan terperinci Bagaimana untuk Mensiri Kelas dengan Elegan ke Strim dalam C Menggunakan Corak Kilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan