내가 Boost.Serialization 사용하여 배 표현식 템플릿 팩을 직렬화하고있어 떠날 :템플릿 기능은 특정 유형을 매핑하고 다른 모든 변경
template <typename ... Args>
std::string toBytes(Args... args)
{
std::ostringstream buf;
boost::archive::binary_oarchive arch(buf);
(arch << ... << args);
return buf.str();
}
이것은 좋은 작동하지만을 나는 몇 가지 기본적인 포인터를 직렬화 할 때 유형 (말하자면, char*
), 그것은 그것에 질식시킨다. Boost.Serialization이 이러한 유형을 의도적으로 직렬화하지 않는다는 것을 이해합니다. 그래서, 나는 그것을 직렬화하는 "기본"방법을 제공하고 싶다.
CharPtrWrapper
및
f
신원 기능으로 작동합니다 다른 유형을 반환
f(char*)
있도록 일부 기능
f
을 통해 각
args
요소를지도 할 것을 달성하기 위해.
template<typename T>
T f(T x) { return x; }
template<>
CharPtrWrapper f(char * x) { return CharPtrWrapper(x); }
하지만이 코드는
의 전문화 아니다오류 C2912을 제공합니다 :
내 방식이었다 명시 적 전문성 'CharPtrWrapper f를 (숯불 *)를'함수 템플릿
무엇이 문제이며 어떻게이 문제를 해결할 수 있습니까?
전문화 과정은 주 템플릿 뒤에 있어야합니다. 어쨌든 오버로드를 대신 사용해보십시오. –
'CharPtrWrapper f (char * x)'는'T f (T x)'와 완전히 일치하지 않습니까? – rustyx