在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash? 下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。 class Hashable { public: virtual std::size_t
在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash?在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash? 下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。 class Hashable { public: virtual std::size_t,c++,templates,C++,Templates,在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash? 下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。 class Hashable { public: virtual std::size_t hash() const = 0; }; class A : public Hashable { std::size_t hash() override const { ... return hash_value;
下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。
class Hashable {
public:
virtual std::size_t hash() const = 0;
};
class A : public Hashable {
std::size_t hash() override const {
...
return hash_value;
}
};
class B : public Hashable {
std::size_t hash() override const {
...
return hash_value;
}
};
namespace std {
template<>
struct hash<typename T /*where T matches all type that has hash member function*/> {
std::size_t operator()(const T& t) {
return t.hash();
}
};
}
类可散列{
公众:
虚拟std::size\u t hash()const=0;
};
A类:公共哈希表{
std::size\u t hash()覆盖常量{
...
返回哈希值;
}
};
B类:公共哈希表{
std::size\u t hash()覆盖常量{
...
返回哈希值;
}
};
名称空间标准{
模板
结构散列{
std::size\u t运算符()(常量t&t){
返回t.hash();
}
};
}
简短的回答是:不,不干净。定义一个抽象类,它定义了这个“代码> hash())/>代码,是否有所有这些类继承,并明确指定<代码> CallHashFromThisAbstractClass < /Case>辅助类作为哈希函数,无论它被调用哪里,C++都不给你反射工具来回答这个问题。“将散列作为函数的所有类“问题。这是您需要有意实现的,而不是自动实现的。你可以制作一个模板函数,它可以在任何一个有<代码>哈希的类中工作,如果编译时,它会出错,如果没有用到的话,你可以考虑:你能用C++的lambda?<代码> STD::EnabLeIftt < /C>或将被调用来实现你想要的效果,但如果我理解正确的话,你不能部分地专攻std,简短的回答可能是:不,不干净。定义一个抽象类,它定义了这个“代码> hash())/>代码,是否有所有这些类继承,并明确指定<代码> CallHashFromThisAbstractClass < /Case>辅助类作为哈希函数,无论它被调用哪里,C++都不给你反射工具来回答这个问题。“将散列作为函数的所有类“问题。这是您需要有意实现的,而不是自动实现的。你可以制作一个模板函数,它可以在任何一个有<代码>哈希的类中工作,如果编译时,它会出错,如果没有用到的话,你可以考虑:你能用C++的lambda?<代码> STD::EnabLeIftt < /C>或将被调用来实现你想要的效果,但是如果我理解正确的话,你不能用那种方式部分地专攻std