Initialise Global <key,value =“”>哈希</key,>

时间:2011-07-04 21:03:04

标签: c++ qt initialization global-variables

我想将QHash初始化为全局变量。

因为它是全局的我不能写像

这样的东西
QHash<QString, int> MY_HASH;
MY_HASH["one"] = 1;
MY_HASH["two"] = 2;

但我不确定如何在其初始化中为MY_HASH分配值。

3 个答案:

答案 0 :(得分:19)

如果使用c ++ 0x,则可以使用initializer_list,如下所示:

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

在gcc中,使用命令行标志-std = c ++ 0x

启用c ++ 0x

答案 1 :(得分:8)

创造一个功能?

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();

答案 2 :(得分:0)

我遇到了同样的问题,并为此编写了一个小模板类。 有人可能会觉得这很有用......

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();