2011-03-29 4 views
2

주로 부식 직렬화를 사용하고 있습니다. 템플릿 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은 행과 열입니다, ElementTypedouble 또는 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, CElementType으로 작동하게하려면 어떻게해야합니까?

편집 : 이러한 오류의 원인이 라인은 다음과 같습니다

그것은 나에게 서명/부호 불일치처럼 보이는
/[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>]' 
+0

어떻게 serialize 메서드를 호출합니까? – LumpN

+0

부스트라고 부릅니다. 제 편집을 참조하십시오. – Philipp

+0

GCC의 버전은 무엇입니까? –

답변

1

. 템플릿 함수는 int로 선언되었지만 오류는 템플릿과 일치시키려는 객체가 1u3u이라는 매개 변수를 가지고 있음을 나타냅니다. 직렬화하려는 객체를 인스턴스화 할 때 차원에 부호없는 값을 사용하고 있습니까? 직렬화 템플릿 함수를 unsigned 초로 변경하거나 int 초로 매트릭스를 인스턴스화 해보십시오.