2
我使用的是boost序列化,主要是侵入式版本。对于一个模板Matrix类我想有这对Visual Studio的工作原理与下面的代码non-intrusive version:模板类的非侵入式序列化方法
namespace boost
{
namespace serialization
{
template<class Archive, int R, int C, class ElementType>
void serialize(Archive & ar, Matrix<R, C, ElementType> & m, const unsigned int version)
{
ar & ...
}
}
}
int R
,int C
是该行和列,ElementType
是double
或float
。
但是,这不会对GCC 4.3.2错误
error: 'class Matrix<1u, 3u, double>' has no member named 'serialize'
如果我用一种特殊的形式像
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, Matrix<3,1,double> & m, const unsigned int version)
{
ar & ...
}
}
}
它编译于GCC,当然只为工作特殊的模板参数集。
我该怎么做才能使它在所有的编译器上都能工作R
,C
和ElementType
?
编辑:这些都是导致错误的线:
/[myfolder]/lib/BOOST/1_44_0/include/boost/serialization/access.hpp: In static member function 'static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::binary_iarchive, T = Matrix<3u, 1u, double>]':
/[myfolder]/lib/BOOST/1_44_0/include/boost/serialization/serialization.hpp:70: instantiated from 'void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::binary_iarchive, T = Matrix<3u, 1u, double>]'
/[myfolder]/lib/BOOST/1_44_0/include/boost/serialization/serialization.hpp:129: instantiated from 'void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::binary_iarchive, T = Matrix<3u, 1u, double>]'
/[myfolder]/lib/BOOST/1_44_0/include/boost/archive/detail/iserializer.hpp:182: instantiated from 'void boost::archive::detail::iserializer<Archive, T>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const [with Archive = boost::archive::binary_iarchive, T = Matrix<3u, 1u, double>]'
你如何调用序列化方法? – LumpN 2011-03-29 09:06:51
助推器,请参阅我的编辑。 – Philipp 2011-03-29 09:53:14
哪个版本的GCC? – 2011-03-29 10:19:35