【发布时间】:2015-06-09 21:43:21
【问题描述】:
我正在处理一些不幸的代码,它有两种完全不同的序列化机制。一个使用类似于template <class Archive> void serialize_v1(Archive& a) 的存档模板,而另一个使用template <template <bool> class Archive> void serialize_v2(Archive<false>& a)。第一个重载一个操作符进行序列化,如a % foo 进行序列化,而第二个使用归档上的方法,如a.proc_int(foo)。
我正在尝试在两者之间编写一个适配器,这样我就不必一直编写两个序列化函数。理想情况下,我会有类似的东西:
template <class ArchiveV1>
class serialize_adapter
{
serialize_adapter(ArchiveV1& one) : one(one) { };
// functions for v2 serialization
void proc_int(int x) {
one % x;
}
ArchiveV1& one;
}
template <class ArchiveV1>
void serialize_v1(ArchiveV1& one)
{
serialize_v2(serialize_adapter(one)); // calls adapter's v2 funcs
}
但是,serialize_v2 采用 template <bool> class ArchiveV2,而 serialize_adapter(one) 不匹配 - 因为它只是一个 class ArchiveV1。但是serialize_adapter 不能只使用bool - 它必须使用ArchiveV1 参数。
似乎我需要创建一个专门针对Archive 类型的模板,这会生成一个专门针对bool 的模板,然后我可以将其传递给serialize_v2。我该如何去做,或者如果这是错误的方法,那么正确的方法是什么?
【问题讨论】: