部分模板专用化失败
Partial Template Specialization Failed
我正在尝试利用C++的部分模板专业化功能。
// for HashMap
template <typename Key, typename Val>
struct GlobalHash : public unary_functor<HashCode, const MapPair<Key, Val>&> {
HashCode operator()(const MapPair<Key, Val> &obj) override {
return HashFuncs::global_hashf(reinterpret_cast<const char *>(&obj.key), sizeof(obj.key));
}
};
template <typename T>
struct GlobalHash<T, char> : public unary_functor<HashCode, const T&> {
HashCode operator()(const T &obj) override {
return HashFuncs::global_hashf(reinterpret_cast<const char *>(&obj), sizeof(T));
}
};
// real Hash Set
template <class Obj, class hashf = GlobalHash<Obj>>
class HashSet {
...
}
我希望HashSet声明的第二个模板参数hashf对应于结构体GlobalHash的第一个声明,即具有 2 个模板参数的声明。看起来,编译器无法这样做,告诉我类模板GlobalHash需要 2 个模板参数。
如何让它采用带有 1 个参数的类模板?很多谢谢!!
如果希望模板参数具有默认值,可以这样编写:
template <typename Key, typename Val = char>
struct GlobalHash : public ....... {
.........
};
现在GlobalHash<int>
是GlobalHash<int, char>
的缩写。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 调用专用模板时出错"no matching function for call to [...]"
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 模板专用化(按容器):value_type
- 部分模板专用化失败
- 从具有部分专用化的boost:hana::set中提取类型失败
- 我的C++模板失败:非模板结构的显式专用化
- C++模板专用化因非类型参数包而失败
- 使用"auto"的部分专用模板推断失败的模板参数推断
- enable_if的模板专用化在 Clang 中失败,适用于 GCC
- 为什么在第二次调用时使用默认参数时此模板专用化失败
- 如果实例化,如何使模板化变量专用化在编译时失败
- 由于未知的模板定义,模板专用化失败
- 类专用成员-数组访问失败
- 完全专用模板的constexpr静态成员在CLang上的动态链接失败
- 模板模板部分专用化失败:"expected a class template"