Initialize Global <Key, Value> Hash - PullRequest
       11

Initialize Global <Key, Value> Hash

9 голосов
/ 05 июля 2011

Я хочу инициализировать QHash как глобальную переменную.

Поскольку это глобально, я не могу написать что-то вроде

QHash<QString, int> MY_HASH;
MY_HASH["one"] = 1;
MY_HASH["two"] = 2;

Но я не уверен, как бы я присвоил значения MY_HASH при его инициализации.

Ответы [ 3 ]

19 голосов
/ 05 июля 2011

Если вы используете c ++ 0x, вы можете использовать initializer_list, который будет выглядеть следующим образом:

QHash<QString, int> MY_HASH({{"one",1},{"two",2}});

В gcc включите c ++ 0x с флагом командной строки -std = c ++0x

8 голосов
/ 05 июля 2011

Сделать функцию?

typedef QHash<QString, int> hash_type

hash_type InitMyHash(){
  hash_type hash;
  hash["one"] = 1;
  hash["two"] = 2;
  // ...
  return hash;
}

hash_type MY_HASH = InitMyHash();
0 голосов
/ 14 октября 2014

У меня была та же проблема, и я написал небольшой шаблонный класс для этого.Кто-то может найти это полезным ...

template <class T, class U>
class QHashBuilder
{
public:
    QHashBuilder & add(const T & key, const U & value)
    {
        _hash.insert(key,value);
        return *this;
    }

    QHash<T,U> build()
    {
        return _hash;
    }

private:
    QHash<T,U> _hash;
};

Вы бы использовали его так:

QHash<QString,int> hash = QHashBuilder<QString,int>().add("foo",1).add("bar",2).build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...