C++ 使用分部模板类作为专用模板函数
我有一个模板,我想用一个向量(它本身就是一个模板)专门化它。有可能吗 以下是编译器错误: 错误C2768:“序列化”:非法使用显式模板参数 我需要做的一个小例子:C++ 使用分部模板类作为专用模板函数,c++,templates,syntax,template-specialization,specialization,C++,Templates,Syntax,Template Specialization,Specialization,我有一个模板,我想用一个向量(它本身就是一个模板)专门化它。有可能吗 以下是编译器错误: 错误C2768:“序列化”:非法使用显式模板参数 我需要做的一个小例子: template<typename T> void serialize(T data, Stream& stream) { //... } template<typename MT> void serialize<map<string, MT>>(map<stri
template<typename T>
void serialize(T data, Stream& stream)
{
//...
}
template<typename MT>
void serialize<map<string, MT>>(map<string, MT> data, Stream& stream)
{
//...
}
模板
无效序列化(T数据、流和流)
{
//...
}
模板
无效序列化(映射数据、流和流)
{
//...
}
函数模板没有部分专门化
只有完全的专门化(这通常是个坏主意)和重载
template<typename MT>
void serialize(map<string, MT> data, Stream& stream)
{
//...
}
然后
模板
无效序列化(T数据、流和流){
序列化_impl{}(数据、流);
}
然而,这通常是一个坏主意,过载通常是正确的做法
此外,序列化时不要按值处理。然后通过
T const&
好的,所以我不能用部分模板化的类专门化我的模板函数?我收回这一点。不能对函数模板进行部分专门化。
template<class T>
struct serialize_impl {
void operator()(T data, Stream& stream) const {
// ...
}
};
template<class MT>
struct serialize_impl<map<string, MT>> {
void operator()(map<string MT> data, Stream& stream) const {
// ...
}
};
template<class T>
void serialize(T data, Stream& stream) {
serialize_impl<T>{}(data, stream);
}