とシリアライザ(簡単にするため、シリアライザは書き込みとデシリアライザは、呼ばれると呼ばれますが、を読む)C++テンプレートや多型
私は許可されていないライブラリを最初からC++ゲーム・シリアライザを書いています。
私が主に気になるのは、読み書きを同期させておくことです(読み込み値は書き込まれた値と同じでなければなりません)。したがって、Packer
は両方のタスクを処理し、列挙型で指定されます。
私が持っているどのような私は、私は、これはC++で可能ではないですけど、私は何を探していますがエレガントな方法である
class ElementToSerialize : ISeriablizable {
virtual void WriteAndRead(Packer & p) {
p.Pack(32);
p.Pack("Hello World");
}
}
Packer<WRITE> wpacker;
Packer<READ> rpacker;
rpacker.buffer = wpacker.buffer;
WriteAndRead(wpacker); // Will write everything in wpacker.buffer
WriteAndRead(rpacker); // Will read wpacker.buffer
を行うことができるようにしたいどのような
enum PackerType {
WRITE,
READ
}
template <PackerType PType>
class Packer {
char *buffer; // Packer will write here
uint32_t index;
template <typename T>
void Pack(T & value); // Calls appropriate functions depending on PType
}
この問題に対処する私はすでにタイプ消去を認識していますが、私は解決策のファンではありません。
あなたは 'WriteAndRead'をテンプレートに変更することができます。 –
ここでテンプレートを使用する必要性は必ずしもわかりませんが、作者であろうと読者であろうと、Packerオブジェクトのメンバーに保存して、実行時にそれに応じて動作させることができます。 – Steeve
@appleapple例では指定されていませんが、この関数は仮想関数であると考えられています。私はそれを明確にするために追加します – aguadoe