![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
nikita |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Заранее прошу прощения за столь глупый вопрос) Есть код:
Суть в том, что в методе writeFromFile из файла считывается 2 поля : 'x' и '5'. Можно ли как-то переменной с именем 'x' присвоить считанное значение(в данном случае 5). Если бы Х был полем класса MyClass, то можно было бы воспользоваться методом findChild(), а в этой ситуации я в тупике. Переменных должно быть много и писать процедуру разбора считанной строки с кучей IF-ов не хочется. Подскажите как быть. Сообщение отредактировал nikita - 20.3.2013, 11:51 |
|
|
![]() |
lanz |
![]()
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Создать QMap<QString, int>, ключ в QMap будет название переменной, а значение - ее значение.
|
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
не очень понятно, в чём вопрос.
x - это глобальная переменная или что? если глобальная, то кто мешает её напрямую юзать? а если не глобальная, то можно передавать указатель на неё как параметр или сделать её статическим членом класса, например. да куча вариантов, вообще говоря. |
|
|
nikita |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
не очень понятно, в чём вопрос. x - это глобальная переменная или что? если глобальная, то кто мешает её напрямую юзать? а если не глобальная, то можно передавать указатель на неё как параметр или сделать её статическим членом класса, например. да куча вариантов, вообще говоря. X - глобальная переменная не имеющая никакого отношения к классу. Вопрос в том, как переменной с именем QString("x") присвоить значенине. Да, если сделать Х членом класса, то можно юзать метод findChild(), но этот вариант мне не подходит! |
|
|
Алексей1153 |
![]()
Сообщение
#5
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
nikita |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Создать QMap<QString, int>, ключ в QMap будет название переменной, а значение - ее значение. К сожалению этот вариант мне не подойдет! Получать значение переменной через QMap медленнее чем на прямую по имени переменной, а обращений к этой(им) переменной у меня будет очень много. Поэтому мне кажется, что лучше пожертвовать временем на разбор считанных из файла данных(преременных должно быть 20-25 штук), чем каждый раз тратить лишнее время на обращение к QMap[]. |
|
|
Алексей1153 |
![]()
Сообщение
#7
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Получать значение переменной через QMap медленнее чем на прямую по имени переменной, а обращений к этой(им) переменной у меня будет очень много. Поэтому мне кажется, что лучше пожертвовать временем на разбор считанных из файла данных(преременных должно быть 20-25 штук), чем каждый раз тратить лишнее время на обращение к QMap[]. http://www.youtube.com/watch?v=lj96YnI9El8 у меня тысячи переменных так работают в реальном времени, и ничего. Кроме того, иного способа, чем ассоциация, тут не придумаешь а про сравнение времени считывания из файла и обращения к мапе - это совсем забавно ) Это как почта России и электронная почта Сообщение отредактировал Алексей1153 - 21.3.2013, 8:06 |
|
|
lanz |
![]()
Сообщение
#8
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Цитата обращений к этой(им) переменной у меня будет очень много Если обращений к конкретной переменной много(очень много(очень очень много(то есть сделано профилирование на готовой программе и доказано что затык в этом месте)), то ее можно закешировать:
А вообще это преждевременная оптимизация. Сообщение отредактировал lanz - 21.3.2013, 8:26 |
|
|
nikita |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 34 Регистрация: 19.10.2012 Пользователь №: 3570 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Всем спасибо! Как я и сказал в первом сообщении - вопрос был довольно глупым)
|
|
|
ViGOur |
![]()
Сообщение
#10
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Можно сделать подобное если вынести все твои переменные в отдельный класс, и сделать его сериализацию (переопределить операторы ввода вывода), что-то вроде:
Единственное тебе нужно будет поддерживать актуальность сериализуемых данных и все...
|
|
|
Iron Bug |
![]()
Сообщение
#11
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Да, если сделать Х членом класса, то можно юзать метод findChild(), но этот вариант мне не подходит! собственно, почему не подходит? вообще, глобальные переменные обычно никто не делает глобальными просто так, врассыпную. делают один класс глобальных переменных и объявляют их все статическими. правда, я не знаю, умеeт ли Qt работать с именами статических членов класса. в конце концов, если нужна именно глобальная переменная для совместимости с какими-нибудь чужеродными компиляторами, то её можно сделать глобальной, а в классе глобальных переменных объявить линк и инициализировать его адресом этой переменной. а в чистом С++ такой встроенной возможности нет. либо делать мап, как уже сказали, либо какие-то другие самодельные списки с именами. |
|
|
lanz |
![]()
Сообщение
#12
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Как мне кажется нужно идти от задачи.
Если есть много объектов, одинаково форматированных, то надо делать как предложил ViGOur Если надо один раз загрузить/сохранить настройки программы, то надо использовать QSettings (http://qt-project.org/doc/qt-4.8/qsettings.html) Если ??? то ??? PROFIT ![]() Если серьезно, то в чем задача состоит? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.6.2025, 16:35 |