我想将QHash初始化为全局变量。
因为它是全局的我不能写像
这样的东西QHash<QString, int> MY_HASH;
MY_HASH["one"] = 1;
MY_HASH["two"] = 2;
但我不确定如何在其初始化中为MY_HASH分配值。
答案 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();