使用部分模板类作为专用模板函数
Using a partial template class as a specialized template function
我有一个模板,我想用一个向量(它本身就是一个模板)来专门化它。有可能吗?
以下是编译器错误:错误C2768:"serialize":非法使用显式模板参数。
我需要做的一个小例子:
template<typename T>
void serialize(T data, Stream& stream)
{
//...
}
template<typename MT>
void serialize<map<string, MT>>(map<string, MT> data, Stream& stream)
{
//...
}
函数模板没有部分专门化。
只有完全专业化(这通常是个坏主意)和过载。
template<typename MT>
void serialize(map<string, MT> data, Stream& stream)
{
//...
}
这将是一个过载。如果你总是允许类型推导发生,它可能会表现得像你期望专业化发挥作用一样。
将您想要支持的任何std
命名空间内容粘贴到serialize
的命名空间中。将其他serialize
重载粘贴到要更改其行为的类的命名空间中。
如果你真的,真的需要部分专业化,把你的工作转发到一个模板类中,并对该类进行部分专业化。
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);
}
然而,这通常是个坏主意,过载通常是正确的做法。
此外,在序列化时不要按值取值。然后乘坐T const&
。
相关文章:
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 具有常量引用参数的函数模板专用化
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- C++模板专用化 - 无法匹配函数定义
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- 如何使专用函数模板成为某个类的朋友?
- 如何按类型为元组元素创建专用函数
- 无法访问专用函数
- 使用指向部分专用函数成员的指针自动填充向量
- 64 位 G++ 4.6.3 不会在专用函数模板中将长整型视为长整型,即使它们的大小相同。这是一个错误吗?
- 操作员过载的专用函数
- C++调用模板专用函数
- 模板类中专用函数的声明
- 使用专用函数对异构集合的 STL 算法
- C++专用函数-不在此范围内错误
- 为什么我不能专用函数模板?
- 用于专用函数参数的模板
- 代码重复和模板专用化(当专用函数具有不同的返回类型时)
- 具有专用函数的Pull-Apart函数类型
- 专用函数模板