Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash? 下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。 class Hashable { public: virtual std::size_t_C++_Templates - Fatal编程技术网

在C++;,是否可以为所有具有哈希成员函数的类定义专门的std::hash? 下面的代码显示了我想要达到的目标,但是我不确定C++中是否有可能。 class Hashable { public: virtual std::size_t

在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++;,是否可以为所有具有哈希成员函数的类定义专门的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;
  }
};

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