2011-03-29 70 views
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 Rint C是該行和列,ElementTypedoublefloat

但是,這不會對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,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

你如何調用序列化方法? – LumpN 2011-03-29 09:06:51

+0

助推器,請參閱我的編輯。 – Philipp 2011-03-29 09:53:14

+0

哪個版本的GCC? – 2011-03-29 10:19:35

回答

1

它看起來像一個符號/無符號不匹配給我。您的模板函數聲明爲int s,但錯誤表示它試圖與模板匹配的對象的參數爲1u3u。當你實例化你試圖序列化的對象時,你使用的是維度的無符號值嗎?嘗試更改序列化模板函數以獲取unsigned s或使用int s實例化Matrix。