Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用分部模板类作为专用模板函数_C++_Templates_Syntax_Template Specialization_Specialization - Fatal编程技术网

C++ 使用分部模板类作为专用模板函数

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

我有一个模板,我想用一个向量(它本身就是一个模板)专门化它。有可能吗

以下是编译器错误: 错误C2768:“序列化”:非法使用显式模板参数

我需要做的一个小例子:

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