C シリアル化でクラス ID の切り替えを回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-02 15:25:02
オリジナル
375 人が閲覧しました

How to Avoid Class ID Switching in C   Serialization?

C でのファクトリー パターンによるシリアル化

この記事では、C でのシリアル化について説明し、一般的に使用されるクラス ID スイッチング パターンの代替アプローチを提供します。

問題:

古典的な C シリアル化パターンでは、オブジェクトを逆シリアル化するためにクラス ID を切り替える必要があります。ただし、このアプローチはエラーが発生しやすく、メンテナンスが複雑になる可能性があるため、アンチパターンであると考えられます。

解決策 1: シリアル化のブースト

シリアル化のブーストは 3 番目の方法です。面倒な作業を自動化することでシリアル化を簡素化するパーティ ライブラリ。これは、オブジェクトをシリアル化および逆シリアル化するための効率的で信頼性の高い方法を提供します。

解決策 2: 登録可能なクラスを使用したファクトリ パターン

クラス ID 切り替えの代替案は、ファクトリ パターンを使用することです。登録可能なクラスあり。 C での基本的な実装は次のとおりです。

<code class="cpp">template<typename K, typename T>
class Factory {
private:
    typedef T* (*CreateObjectFunc)();
    std::map<K, CreateObjectFunc> mObjectCreator;
public:
    template<typename S>
    void registerClass(K id) {
        mObjectCreator.insert(std::make_pair<K, CreateObjectFunc>(id, &createObject<S>));
    }
    bool hasClass(K id) {
        return mObjectCreator.find(id) != mObjectCreator.end();
    }
    T* createObject(K id) {
        typename std::map<K, CreateObjectFunc>::iterator iter = mObjectCreator.find(id);
        if (iter == mObjectCreator.end()) {
            return NULL;
        }
        return ((*iter).second)();
    }
};</code>
ログイン後にコピー

このアプローチにより、クラスの登録とオブジェクトの動的作成が可能になり、手動でクラス ID を切り替える必要がなくなります。

以上がC シリアル化でクラス ID の切り替えを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!