LINUX.ORG.RU

Сообщения anarelian

 

[C++][Qt] Вопрос по макросам и умным указателям

Осиливаю потихоньку указанный язык с помощью гугла и форумов.
Вот что посоветуете почитать из не-талмудов (времени увы мало), чтобы не было таких вопросов:
1) Когда можно использовать макросы, а когда не стоит - например, меня всё время тянет на вещи вроде

#define ref &
void printDmth(const QString ref str);
чтобы получить C#, но компилируемый. Но ведь макросы в С++ есть deprecated вещь, и вообще так менять язык не стоит во имя других программистов?
2) Какой вид умного указателя выбрать для хранения глобального объекта «тяжелого» класса сложной структуры, с опять же большими массивами внутри, у которых свои подмассивы и т.д. Может, QScopedPtr? я так понял, он самый быстрый из «умных», а это с учетом размера массивов в классе важно. И раз уж Qt используется, то буст тянуть не хочется - разве что местные *_ptr-ы существенно лучше кутишных.

P.S. Если вопросы тупые, прошу прощения. Всё-таки совсем в одиночку трудно учить такой язык. И да, про D в курсе, но он мёртв.

 ,

anarelian
()

[C++][Qt] Как быстро работать с XML

День добрый. До сих пор тут в read-only режиме был, но вот и у меня возникла проблема: надо читать с помощью Qt здоровые и сложные по структуре XML, и моя подсмотренная у одного XML-редактора реализация «читалки» оказалась дико тормозной.
Собственно вот эта функция, от которой все беды:

QDomElement SigmaDCFile::getXmlElement(const QDomNode & domNode, const QString& path, Qt::CaseSensitivity caseSensitivity) const {
    QStringList elementTagNames = path.split('/');
    QDomNodeList domNodeList = domNode.childNodes();
    for(int i = 0; i < domNodeList.count(); i++)
        if(domNodeList.at(i).toElement().tagName().compare(elementTagNames.first(),caseSensitivity) == 0) {
            elementTagNames.takeFirst();
            if(elementTagNames.isEmpty())
                return domNodeList.at(i).toElement();
            else
                return getXmlElement(domNodeList.at(i).toElement(),elementTagNames.join("/"), caseSensitivity);
        }
    return QDomElement();
}
Так-то, она весьма удобна - можно просто обращаться к любому элементу с помощью полного пути, и код загрузки краткий получается. Возможно в данном случае и простой доступ по пути/тегу к элементу получить, и тормозов не словить? как в пословице про рыбку и еще кое-что :) Так-то, структура XML-я фиксированная, но вот новые дочерние элементы таки могут появляться. И напрямую бежать по всему файлу с помощью QDomElement вариант унылый. P.S. Документацию Qt смотрел. Ничего подходящего не обнаружил, благо в XML я нуб.

 ,

anarelian
()

RSS подписка на новые темы