0

私は次のクラスを持っています

class hash_key {
public:
    int get_hash_value(std::string &inStr, int inSize) const {
        int hash = 0;
        for(int i = 0; i < (int)inStr.size(); i++)  {
            int val = (int)inStr[i];
            hash = (hash * 256 + val) % inSize;
        }
        return hash;
    }
};

それを別のテンプレートクラスに渡したいので、そのget_hash_value 方法を呼び出すことができます。これを使用して同じことを達成する方法はありますかoperator()()

4

2 に答える 2

2

このようなもの:

class hash_key {
public:
    hash_key(std::string& inStr, int inSize) : size(inSize), str(inStr) {}
    int operator()() const
    {
        int hash = 0;
        for(int i = 0; i < (int)str.size(); i++)  {
            int val = (int)str[i];
            hash = (hash * 256 + val) % size;
        }
        return hash;
    }

private:
   std::string str;
   int size;
};

Now you can do:

std::string str = "test";
hash_key key(str, str.size());

//pass below to template, calls `operator()()`
key();
于 2012-04-24T09:57:44.713 に答える
1
struct hash_key {
public:
    int operator()(std::string &inStr, int inSize) const {
        int hash = 0;
        for(int i = 0; i < (int)inStr.size(); i++)  {
            int val = (int)inStr[i];
            hash = (hash * 256 + val) % inSize;
        }
        return hash;
    }
};
于 2012-04-24T09:56:09.987 に答える