crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Присвоить значение, аналог findChild
nikita
  опции профиля:
сообщение 20.3.2013, 11:51
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Заранее прошу прощения за столь глупый вопрос) Есть код:
...
int x = 3;
...
void MyClass::writeFromFile(QString fileName)
{ ... }


Суть в том, что в методе writeFromFile из файла считывается 2 поля : 'x' и '5'. Можно ли как-то переменной с именем 'x' присвоить считанное значение(в данном случае 5). Если бы Х был полем класса MyClass, то можно было бы воспользоваться методом findChild(), а в этой ситуации я в тупике. Переменных должно быть много и писать процедуру разбора считанной строки с кучей IF-ов не хочется. Подскажите как быть.

Сообщение отредактировал nikita - 20.3.2013, 11:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 20.3.2013, 12:55
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Создать QMap<QString, int>, ключ в QMap будет название переменной, а значение - ее значение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.3.2013, 15:53
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


не очень понятно, в чём вопрос.
x - это глобальная переменная или что?
если глобальная, то кто мешает её напрямую юзать? а если не глобальная, то можно передавать указатель на неё как параметр или сделать её статическим членом класса, например. да куча вариантов, вообще говоря.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 21.3.2013, 7:34
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 20.3.2013, 16:53) *
не очень понятно, в чём вопрос.
x - это глобальная переменная или что?
если глобальная, то кто мешает её напрямую юзать? а если не глобальная, то можно передавать указатель на неё как параметр или сделать её статическим членом класса, например. да куча вариантов, вообще говоря.


X - глобальная переменная не имеющая никакого отношения к классу. Вопрос в том, как переменной с именем QString("x") присвоить значенине. Да, если сделать Х членом класса, то можно юзать метод findChild(), но этот вариант мне не подходит!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.3.2013, 7:36
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(nikita @ 21.3.2013, 10:34) *
Вопрос в том, как переменной с именем QString("x")

сделать ассоциацию имя->адрес переменной
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 21.3.2013, 7:42
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(lanz @ 20.3.2013, 13:55) *
Создать QMap<QString, int>, ключ в QMap будет название переменной, а значение - ее значение.


К сожалению этот вариант мне не подойдет! Получать значение переменной через QMap медленнее чем на прямую по имени переменной, а обращений к этой(им) переменной у меня будет очень много. Поэтому мне кажется, что лучше пожертвовать временем на разбор считанных из файла данных(преременных должно быть 20-25 штук), чем каждый раз тратить лишнее время на обращение к QMap[].
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.3.2013, 7:49
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(nikita @ 21.3.2013, 10:42) *
Получать значение переменной через QMap медленнее чем на прямую по имени переменной, а обращений к этой(им) переменной у меня будет очень много. Поэтому мне кажется, что лучше пожертвовать временем на разбор считанных из файла данных(преременных должно быть 20-25 штук), чем каждый раз тратить лишнее время на обращение к QMap[].


http://www.youtube.com/watch?v=lj96YnI9El8

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

а про сравнение времени считывания из файла и обращения к мапе - это совсем забавно ) Это как почта России и электронная почта

Сообщение отредактировал Алексей1153 - 21.3.2013, 8:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 21.3.2013, 8:25
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
обращений к этой(им) переменной у меня будет очень много


Если обращений к конкретной переменной много(очень много(очень очень много(то есть сделано профилирование на готовой программе и доказано что затык в этом месте)), то ее можно закешировать:
int my_var = my_map[var_name];
// много обращений к переменной


А вообще это преждевременная оптимизация.

Сообщение отредактировал lanz - 21.3.2013, 8:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 21.3.2013, 8:48
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Всем спасибо! Как я и сказал в первом сообщении - вопрос был довольно глупым)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 21.3.2013, 9:59
Сообщение #10


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Можно сделать подобное если вынести все твои переменные в отдельный класс, и сделать его сериализацию (переопределить операторы ввода вывода), что-то вроде:
struct CClass
{
    int m_a, m_b, m_c;
    CClass(int a, int b, int c): m_a(a), m_b(b), m_c(c){}
};

std::ostream &operator <<(std::ostream &stream, const CClass &c)
{
    stream << c.m_a << " " << c.m_b << " " << c.m_c;
    return stream;
}

std::istream &operator >>(std::istream &stream, CClass &c)
{
    stream >> c.m_a >> c.m_b >> c.m_c;

    return stream;
}

int main(int , char **)
{
    CClass c(1,2,3);

    std::cout << c << std::endl;
    std::cin >> c;
    std::cout << c << std::endl;

    return 0;
}
Единственное тебе нужно будет поддерживать актуальность сериализуемых данных и все...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 16:53