Russian Qt Forum

Программирование => С/C++ => Тема начата: Fregloin от Июнь 13, 2014, 14:09



Название: Статический QHash для множества объектов одного класса
Отправлено: Fregloin от Июнь 13, 2014, 14:09
Привет. Как сделать статический QHash<QString,QString>(например) для множества объектов одного класса.

Допустим сделал так:

Код:
class MyClass {
 static QHash<QString,QString> staticHash;
}

Как его инициализировать и где?

Сейчас подход такой (понимаю что говнокод)
Код:
void CDKSwitchState::parseState(const QJsonValue & jsonValue)
{
    CRailObjectState::parseState(jsonValue);

    if(!jsonValue.isObject())
        return;

    QJsonObject jsonObject = jsonValue.toObject();

    QString valueS;

    if(myjson_read_string_value(jsonObject,propname_s_fact_no_pos,valueS))
    {
        static  QHash<QString,LongAbsentPositionState>  lapsHash;
        if(lapsHash.isEmpty())
        {
            lapsHash[valuename_s_fact_no_pos_unchecked_pos]=lapsUnchecked;
            lapsHash[valuename_s_fact_no_pos_checked_pos]=lapsChecked;
        }
        updateStateProperty(prop_long_absent_position_state,lapsHash.value(valueS,lapsOk));
    }

}
Т.е. использую статический хеш в функции, но понимаю что это далеко не лучшее решение. Экземпляров много, но все должны обращаться к хешу на чтение.


Название: Re: Статический QHash для множества объектов одн
Отправлено: Johnik от Июнь 13, 2014, 20:59
В Qt 5 есть макросы Q_GLOBAL_STATIC и Q_GLOBAL_STATIC_WITH_ARGS, можно воспользоваться ими или посмотреть их реализацию.
В Qt 4 они есть тоже, но там они не документированы.

Как вариант, воспользоваться синглетонами, очень хорошо и подробно они описаны у Александреску.