在C ++中使用函数作为类成员

时间:2015-02-24 18:32:57

标签: c++ oop hash

我来自Java,我对C ++和C有一些了解,但并不深入。我正在创建哈希表类,它将封装存储值和键。但问题是什么是更好的传递方法,例如,在构造函数自定义函数中,它将计算表中的哈希键。

在java中我会使用函数(接口)将其设置为类成员。在C ++中执行此操作的最佳实践是什么,将函数指针用作成员?请建议如何实现这一点。

1 个答案:

答案 0 :(得分:1)

C ++实践是使用可调用类型对类进行参数化,以计算哈希:

template<class Key, class Value, class Hash> class hashtable;

这允许任何可调用对象作为哈希函数,无论是普通函数还是函子对象。

然后在构造函数中传递可调用对象:

template<class Key, class Value, class Hash>
class hashtable
{
  hashtable(Hash h);
};

这允许您指定不同的哈希函数而无需创建新类。

最后,为了使hashtable的声明和构造更方便,我们指定默认模板参数和构造函数参数:

template<class Key, class Value, class Hash = std::hash<Key> >
class hashtable
{
  hashtable(Hash h = Hash());
};