주로 부식 직렬화를 사용하고 있습니다. 템플릿 Matrix 클래스를 위해 나는 다음 코드를 사용하여 비주얼 스튜디오에서 작동 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에서 컴파일
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, Matrix<3,1,double> & m, const unsigned int version)
{
ar & ...
}
}
}
같은 특별한 형태를 사용하는 경우
그러나이 오류
error: 'class Matrix<1u, 3u, double>' has no member named 'serialize'
와 GCC 4.3.2에서 작동하지 않습니다 템플릿 인수의 특수 세트.
모든 컴파일러에서 모두 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>]'
어떻게 serialize 메서드를 호출합니까? – LumpN
부스트라고 부릅니다. 제 편집을 참조하십시오. – Philipp
GCC의 버전은 무엇입니까? –