我想定义用于序列化变量的接口,根据模板参数,执行序列化代码(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);