true
テンプレートの引数に応じて、シリアル化コード( )または何も実行されない()変数をシリアル化するためのインターフェイスを定義したいと思いますfalse
。シリアル化関数自体は、アーカイブ型と変数型でテンプレート化されています。
シリアル化関数を部分的に特殊化するのが良いですか、それとも内部に静的メソッドを持つクラスを特殊化するのが良いですか?以下のコードは正しいですか?もっと良い方法はありますか?
これは私の疑似コードであり、機能するかどうかはわかりません。
クラスアプローチは次のようになります。
template<bool ser>
struct MaybeSerialize;
template<> struct MaybeSerialize<true>{
template<class ArchiveT, class T>
static void serialize(ArchiveT& archive, T& var){ /* serialize*/ }
};
template<> struct MaybeSerialize<false>{
template<class ArchiveT, class T>
static void serialize(ArchiveT& archive, T& var){ /* do nothing*/ }
};
// call like this
MaybeSerialize<compileTimeBool>::serialize(archive,variable);
部分的な特殊化は次のようになります(構文はおそらく間違っています):
template<bool ser, class Archive T, typename T> maybeSerialize(ArchiveT&,T&);
template<class ArchiveT, typename T> maybeSerialize<true>(ArchiveT&,T&){ /* serialize */ }
template<class ArchiveT, typename T> maybeSerialize<false>(ArchiveT&,T&){ /* do nothing */ }
// call like this
maybeSerialize<compileTimeBool>(archive,variable);