I am writing a template HashTable class. I have got it working, but I
want to make the code more generic and more robust. The current code
looks something like this:
template <class InnerType, class KeyType, class KeyToSizeT>
class myHash
{
// Impl here
};
Where:
InnerType is the data type being stored
KeyType is the data type of the hash key
KeyToSize is the function that returns the size of the hash key
I am now mandating that InnerType MUST implement interface IHashable:
class myHashKey
{
virtual bool operator==(const myHashKey& key) const = 0 ;
virtual size_t Size() const = 0 ;
};
class IHashable
{
virtual const myHashKey* GetKey() const = 0 ;
virtual bool IsKeyEqual(const myHashKey* key) const = 0;
virtual size_t KeySize() const = 0 ;
};
With this new policy, I want to be able to simplify my HashTable class to:
template <class InnerType>
class myHash
{
//Ho do I reference KeyType and KeyToSizeT now ?
// Impl here
};