两种专门方法中的相同代码
same code in two specialized methods
我有一个带有空模板方法的 class:
// my method in a class
template<class U>
void save(U& archive, const unsigned int version) const {
// empty
}
我在同一个标题中的 class 之后有三个 sepcializations,但其中两个具有相同的代码:
template<>
void Dataset1::save(boost::archive::xml_oarchive& archive, const unsigned int version) const {
archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Dataset0);
archive & BOOST_SERIALIZATION_NVP(m_a1_);
archive & BOOST_SERIALIZATION_NVP(m_b1_);
}
template<>
void Dataset1::save(boost::archive::text_oarchive& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
template<>
void Dataset1::save(boost::archive::binary_oarchive& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
- 我该怎么做才能不重复自己?
- 空方法可以吗?
- 有没有更好的方法来做我想做的事?
执行此操作的最简单方法是仅具有这两个调用的实现方法
class Dataset1 {
...
private:
template <typename T>
void save_impl_text_binary(T& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
};
template<>
void Dataset1::save(boost::archive::xml_oarchive& archive, const unsigned int version) const {
archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Dataset0);
archive & BOOST_SERIALIZATION_NVP(m_a1_);
archive & BOOST_SERIALIZATION_NVP(m_b1_);
}
template<>
void Dataset1::save(boost::archive::text_oarchive& archive, const unsigned int version) const {
this->save_impl_text_binary(archive, version);
}
template<>
void Dataset1::save(boost::archive::binary_oarchive& archive, const unsigned int version) const {
this->save_impl_text_binary(archive, version);
}
我有一个带有空模板方法的 class:
// my method in a class
template<class U>
void save(U& archive, const unsigned int version) const {
// empty
}
我在同一个标题中的 class 之后有三个 sepcializations,但其中两个具有相同的代码:
template<>
void Dataset1::save(boost::archive::xml_oarchive& archive, const unsigned int version) const {
archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Dataset0);
archive & BOOST_SERIALIZATION_NVP(m_a1_);
archive & BOOST_SERIALIZATION_NVP(m_b1_);
}
template<>
void Dataset1::save(boost::archive::text_oarchive& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
template<>
void Dataset1::save(boost::archive::binary_oarchive& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
- 我该怎么做才能不重复自己?
- 空方法可以吗?
- 有没有更好的方法来做我想做的事?
执行此操作的最简单方法是仅具有这两个调用的实现方法
class Dataset1 {
...
private:
template <typename T>
void save_impl_text_binary(T& archive, const unsigned int version) const {
archive & boost::serialization::base_object<Dataset0>(*this);
archive & m_a1_;
archive & m_b1_;
}
};
template<>
void Dataset1::save(boost::archive::xml_oarchive& archive, const unsigned int version) const {
archive & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Dataset0);
archive & BOOST_SERIALIZATION_NVP(m_a1_);
archive & BOOST_SERIALIZATION_NVP(m_b1_);
}
template<>
void Dataset1::save(boost::archive::text_oarchive& archive, const unsigned int version) const {
this->save_impl_text_binary(archive, version);
}
template<>
void Dataset1::save(boost::archive::binary_oarchive& archive, const unsigned int version) const {
this->save_impl_text_binary(archive, version);
}