gpt4 book ai didi

c++ - 为满足条件的类专门化 `std::hash`

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:26 27 4
gpt4 key购买 nike

假设我有一个简单的 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 { /*..*/ }
// ...
};

}

Demo

关于c++ - 为满足条件的类专门化 `std::hash`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36774607/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com