2008-09-17 23 views
8

şablon sınıfı sürümünü belirterek Seri hale getirme için bir sürüm belirtmek istediğim, serileştirdiğim bir şablon sınıfım var (çağrı C). BOOST_CLASS_VERSION, şablon sınıfları için çalışmadığından. Bunu denedim:Seri hale getirme işlemlerini artırın:

namespace boost { 
namespace serialization { 
    template< typename T, typename U > 
    struct version< C<T,U> > 
    { 
     typedef mpl::int_<1> type; 
     typedef mpl::integral_c_tag tag; 
     BOOST_STATIC_CONSTANT(unsigned int, value = version::type::value); 
    }; 
} 
} 

ancak derleme yapmıyor.

error C2913: explicit specialization; 'boost::serialization::version' is not a specialization of a class template

bunu yapmak için doğru yolu nedir: VC8 altında BOOST_CLASS_VERSION bir sonraki çağrı bu hatayı veriyor?

+0

"ancak derleme yapmıyor". Bize biraz bilgi verebilir misiniz? –

+0

VC8: hatası altında C2913: açık uzmanlaşma; 'boost :: serialization :: version', BOOST_CLASS_VERSION numaralı çağrıya bir sınıf şablonunun uzmanlığı değildir. – Jazz

+1

Doğru görünüyor. Hata mesajı version.hpp dahil etmediğinizi önermektedir. –

cevap

11
#include <boost/serialization/version.hpp> 

:-)

+12

BOOST_CLASS_VERSION makrosu bir ad alanının içinde bulunuyorsa, bu hata, global olması gerekir. –

1

Ben Bir isim alanı içinde bunu kapsüllü kadar düzgün makro BOOST_CLASS_VERSION kullanmayı başardı. iade Derleme hataları vardı: Küresel kapsamına BOOST_CLASS_VERSION hareketli bir önceki düzenlemeye önerildiği gibi

error C2988: unrecognizable template declaration/definition 
error C2143: syntax error: missing ';' before '<' 
error C2913: explicit specialization; 'Romer::RDS::Settings::boost::serialization::version' is not a specialization of a class template 
error C2059: syntax error: '<' 
error C2143: syntax error: missing ';' before '{' 
error C2447: '{': missing function header (old-style formal list?) 

sorunu çözüldü. Makroyu başvurulan yapıya yakın tutmayı tercih ederim.

İlgili konular