2008-09-17 3 views
8

나는 부스트 직렬화를위한 버전을 지정하기 위해 내가 직렬화 (C라고 부름) 한 템플릿 클래스를 가지고있다. 템플릿 클래스에서는 BOOST_CLASS_VERSION이 작동하지 않으므로. 나는 이것을 시도했다 :부스트 직렬화 : 템플릿 클래스 버전 지정

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); 
    }; 
} 
} 

그러나 그것은 컴파일되지 않는다.

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

을 할 수있는 올바른 방법은 무엇입니까 : VC8에서 BOOST_CLASS_VERSION에 대한 후속 호출이 오류를 준다?

+0

"컴파일되지 않습니다." 당신은 우리에게 그것보다 약간의 정보를 줄 수 있습니까? –

+0

VC8 미만 : 오류 C2913 : 명시 적 전문화; 'boost :: serialization :: version'은 BOOST_CLASS_VERSION에 대한 후속 호출에서 클래스 템플릿 의 특수화가 아닙니다. – Jazz

+1

올바른 것처럼 보입니다. 오류 메시지는 version.hpp를 포함하지 않았 음을 나타냅니다. –

답변

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

:-)

+12

이 오류는 BOOST_CLASS_VERSION 매크로가 네임 스페이스 안에 있고 전역 적이어야하는 경우에도 발생할 수 있습니다. –

1

는 내가 네임 스페이스 내부를 캡슐화 할 때까지 제대로 매크로 BOOST_CLASS_VERSION을 사용할 수 있었다. 반환 컴파일 오류가 있었다 : 전역 범위에 BOOST_CLASS_VERSION 이동, 이전 편집에서 제안한 것처럼

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?) 

이 문제를 해결했다. 매크로를 참조 된 구조에 가깝게 유지하는 것이 좋습니다.