我使用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不会按意图将这些类型序列化。所以,我想提供一个“默认”方式来序列化它们。
为了实现这个目标我希望每个args
元素通过一些功能f
映射,使f(char*)
将返回CharPtrWrapper
和其他类型的f
应该工作身份的功能。
我的做法是:
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