シリアル化できませんboost::rational<int>
。boost/serialize/rational.h ヘッダーを検索しましたが、存在しません。
/usr/include/boost/serialization/access.hpp:118:9: error: ‘class boost::rational<int>’ has no member named ‘serialize’
それを達成する方法はありますか?
シリアル化できませんboost::rational<int>
。boost/serialize/rational.h ヘッダーを検索しましたが、存在しません。
/usr/include/boost/serialization/access.hpp:118:9: error: ‘class boost::rational<int>’ has no member named ‘serialize’
それを達成する方法はありますか?
分子と分母をシリアル化するだけです。
以下は、半汎用的な形式の脚注です (XML シリアライゼーションのように、名前付きノードを持つアーカイブもサポートしています): Live On Coliru
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/rational.hpp>
#include <iostream>
namespace boost { namespace serialization {
template <typename Archive, typename T>
void save(Archive& ar, ::boost::rational<T> const& r, unsigned /*version*/)
{
int n = r.numerator(), d = r.denominator();
ar & boost::serialization::make_nvp("numerator", n);
ar & boost::serialization::make_nvp("denominator", d);
}
template <typename Archive, typename T>
void load(Archive& ar, ::boost::rational<T>& r, unsigned /*version*/)
{
int n, d;
ar & boost::serialization::make_nvp("numerator", n);
ar & boost::serialization::make_nvp("denominator", d);
r = ::boost::rational<T>(n, d);
}
} }
BOOST_SERIALIZATION_SPLIT_FREE(boost::rational<int>);
using namespace boost;
#include <iostream>
#include <sstream>
int main()
{
rational<int> number(2, 3), other;
std::stringstream ss;
{
archive::xml_oarchive oa(ss);
oa << serialization::make_nvp("rational", number);
}
std::cout << "Serialized: '" << ss.str() << "'\n";
{
archive::xml_iarchive ia(ss);
ia >> serialization::make_nvp("rational", other);
}
std::cout << "Deserialized: " << other;
}
版画
Serialized: '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="10">
<rational class_id="0" tracking_level="0" version="0">
<numerator>2</numerator>
<denominator>3</denominator>
</rational>
</boost_serialization>
'
Deserialized: 2/3
提供されている入出力関数を使用します: https://www.boost.org/doc/libs/1_64_0/libs/rational/rational.html#Input%20and%20Output
にシリアル化std::string
:
template <typename I>
std::string serialize(boost::rational<I>& rational) const {
std::stringstream rational_ss;
rational_ss << rational;
return rational_ss.str();
}
これは、有理数を次のような文字列にシリアライズします"3/5"
。
デシリアライズするには、 を使用しboost::rational
ます>>
。