作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个简单的 bool 特征类,MyTrait
.也就是说,对于任何类型 T
,我能做到MyTrait<T>::value
并得到 true 或 false。我想专攻std::hash
适用于所有类型 T
其中 MyTrait<T>::value
是真的。有什么办法吗?一些失败的尝试:
template <class T, typename std::enable_if<
MyTrait<T>::value, int
>::type = 0>
struct hash<T> {
...
}
失败是因为:
error: default template argument in a class template partial specialization
我还尝试将所有部分特化的东西放在散列之后,但随后出现了 T
的错误消息处于非推导上下文中。
有什么办法吗?至少之前关于 SO 的一个问题表明没有:Specializing std::hash to derived classes .
无论是一个解决方案,还是一个明确的“否”然后是一个简短的解释都是一个很好的答案。
最佳答案
不确定它是否合法,但是根据 C++20 的概念,您可以这样做:
template <typename T>
concept MyConcept = MyTrait<T>::value;
namespace std
{
template <MyConcept T>
struct hash<T>
{
std::size_t operator()(const T& t) const { /*..*/ }
// ...
};
}
关于c++ - 为满足条件的类专门化 `std::hash`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36774607/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!