Я пытаюсь сериализовать матрицу Eigen, используя сериализацию наддува. я видел этот вопрос и попытался использовать решение, однако у меня есть странные ошибки компилятора.
у меня есть shared_ptr
к MatrixXd
и попытайтесь сериализовать его следующим образом:
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include "utils.hpp"boost::shared_ptr<std::map<int, boost::shared_ptr<Eigen::MatrixXd> > > class_to_inv_cov_mat;
template<class Archive>
void serialize(Archive& ar, const unsigned int version){
ar & BOOST_SERIALIZATION_NVP(class_to_inv_cov_mat);
}
У меня также есть utils.hpp, который включает это:
namespace boost {
template<class Archive, typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
inline void serialize(
Archive & ar,
Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> & t,
const unsigned int file_version
)
{
for(size_t i=0; i<t.size(); i++)
ar & t.data()[i];
}
}
Когда я компилирую, я получаю следующие ошибки:
/usr/include/boost/archive/detail/oserializer.hpp:148:5: instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::xml_oarchive, T = Eigen::Matrix<double, -0x00000000000000001, -0x00000000000000001>]’
../src/Main.cpp:357:1: instantiated from here
/usr/include/boost/archive/basic_xml_oarchive.hpp:92:9: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::serialization::is_wrapper<const double>::************)’
Я без понятия что это значит?
необходимо изменить код в утилит, чтобы содержать BOOST_SERIALIZATION_NVP
то есть
усиление пространства имен {
шаблон
inline void serialize (
Архив & соток,
Эйген :: Матрица<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> & т,
const unsigned int file_version
)
{
для (size_t я = 0; я
Других решений пока нет …