#21 Owner model in C++

開啟中
unidan5 年之前創建 · 0 條評論
class DecoderOwnerBase
{
    virtual void* new_picture = 0;
};

class DecoderOwnerDynamic : DecoderOwnerBase
{
public:
    void* new_picture(void*) override;

private:
    void *sys;
};

class DecoderOwnerStatic : DecoderOwnerBase
{
public:
    void* new_picture(void*) override;

private:
    Priv bar;
};

template<DecoderOwner>
class DecoderModuleStatic : DecoderOwner
{
    void decode() {
        void * pic = new_picture();
    }
};

class DecoderModuleDynamic
{
     DecoderModuleDynamic(DecoderOwnerBase *owner);
};

/* Full static:
 * + allocation must be made together
 * + size must be known */
DecoderModuleStatic<DecoderOwnerStatic>;

/* Owner data dynamic + Owner static
 * + the owner object visible to the module is always the same
 * + no need to know the real owner size
 * + one owner object allocated per module */
DecoderModuleStatic<DecoderOwnerDynamic>;

/* Owner data static + Owner dynamic */
DecoderModuleDynamic(new DecoderOwnerStatic);

/* Full dynamic */
DecoderModuleDynamic(new DecoderOwnerDynamic(priv));
``` class DecoderOwnerBase { virtual void* new_picture = 0; }; class DecoderOwnerDynamic : DecoderOwnerBase { public: void* new_picture(void*) override; private: void *sys; }; class DecoderOwnerStatic : DecoderOwnerBase { public: void* new_picture(void*) override; private: Priv bar; }; template<DecoderOwner> class DecoderModuleStatic : DecoderOwner { void decode() { void * pic = new_picture(); } }; class DecoderModuleDynamic { DecoderModuleDynamic(DecoderOwnerBase *owner); }; /* Full static: * + allocation must be made together * + size must be known */ DecoderModuleStatic<DecoderOwnerStatic>; /* Owner data dynamic + Owner static * + the owner object visible to the module is always the same * + no need to know the real owner size * + one owner object allocated per module */ DecoderModuleStatic<DecoderOwnerDynamic>; /* Owner data static + Owner dynamic */ DecoderModuleDynamic(new DecoderOwnerStatic); /* Full dynamic */ DecoderModuleDynamic(new DecoderOwnerDynamic(priv)); ```
登入 才能加入這對話。
未選擇標籤
未選擇里程碑
未指派成員
1 參與者
正在加載...
取消
保存
尚未有任何內容