107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|||||||||||
1 | |||||||||||
Прямой доступ к переменным29.05.2014, 23:32. Просмотров 2087. Ответов 30
Метки нет Все метки)
(
Доброго времени суток, форумчане. Сразу оговорю, что название темы может не совсем корректно раскрывать суть вопроса.
Начну с аналога в PHP, где можно писать вот так
Приведу свой пример. Есть структура и функция в которую нужно передать адрес поля структуры. Но поле это выбирает пользователь. Можно конечно навешать
0
|
|
29.05.2014, 23:32 | |
Доступ к переменным Доступ к переменным класса Доступ из статической функции к не стачисеским переменным Доступ к переменным базового класса при наследовании |
|
Комп_Оратор)
![]() |
||||||
30.05.2014, 01:07 | 2 | |||||
Arkaniy, если честно не понял при чём доступ. По примерам из пи-эйч-пи можно подумать, что речь о явном и не явном определении типа. Я и подумал. Тогда можно сказать, что до C++11 возможности использования переменной без предварительного явного объявления типа нет. Начиная с C++11 есть возможность неявного определения в выражениях совмещающих объявление и присваивание (инициализацию):
но это упрощение не отменяет, а упрощает определение типа (несколько затрудняя работу компилятора)). ![]()
0
|
шКодер самоучка
|
|||||||||||
30.05.2014, 02:05 | 3 | ||||||||||
![]() Решение
IGPIGP, на сколько я понял,ТС спрашивает о ссылках
2
|
Комп_Оратор)
![]() |
||||||
30.05.2014, 03:44 | 4 | |||||
Cra3y, да похоже Вы правы. Но если в PHP можно заселить переменную именем переменной:
![]() Добавлено через 11 минут Ну, то есть, в конечном счёте, определяющим является отличие компилятора в котором строк имён в коде уже нет и интерпретатора для которого листинг читается во время исполнения. Первому нужно иметь определённые типы до компиляции, второму не обязательно их иметь до трансляции. ![]()
1
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
30.05.2014, 17:58 [ТС] | 6 |
Спасибо всем отписавшимся! Особое спасибо Cra3y
![]() Map'ом и воспользуюсь. Решение довольно простое. Даже грустно, что сам к этому не пришел. Добавлено через 56 минут И еще возник вопрос. Как сделать map для пар string - int, string - string? Тоесть так, чтобы значения могли быть разных типов. Вообще если так возможно. Нашел тут темку с этим вопросом, но ответ был исчерпывающим и отрицательным. Но тема 2009 года и может есть что-то из 11 стандарта.
0
|
шКодер самоучка
|
|
30.05.2014, 18:08 | 7 |
Хм.. например использовать boost::variant
1
|
Master of Orion
![]() |
|
30.05.2014, 18:13 | 8 |
Arkaniy, если бы как в том же .Net все классы реализовывали бы object, то можно было бы сделать map на object, но в плюсах - хз. Мб может получиться извратиться в void* указателями, но тут уже хз
![]()
0
|
Комп_Оратор)
![]() |
||||||
30.05.2014, 19:15 | 9 | |||||
Как сделать map для пар string - int, string - string?
0
|
Master of Orion
![]() |
||||||
30.05.2014, 19:59 | 10 | |||||
IGPIGP, я так понял, что в качестве key хочется иметь строку, а в качестве value - число, строку или еще что. то есть а-ля:
0
|
Комп_Оратор)
![]() |
|
30.05.2014, 20:11 | 11 |
Дык, или то или другое.
![]() Я сначала <int, string> выложил, а потом вычитал, что ключом должна быть строка и предложил <string, strng>. С типами <string, int> та же история. ![]() Конечно если ключ - целое, то быстрее будет. Psilon, если честно мне непонятно как выбирается поле структуры и зачем передавать адрес поля, а не указатель на экземпляр например. Вообще, в простых случаях можно делать по старинке: объявлять перечисление и массив строк. Тогда в коде можно найти строку используя имя константы как индекс (если декорировать объявление уточняющим типом перечисления). То есть может выглядеть Arr_str[one] (значение вроде "first_val" или просто "one", в зависимости от того что в массиве строк положили). ![]() А поиск по индекса по строке, - руками. Но со словарём поддержка методов класса есть. Так, что дело вкуса. ![]()
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
30.05.2014, 22:01 [ТС] | 12 |
Psilon, с void пытался. Ругается при компиляции
Код
error: cannot declare pointer to 'void' member Поле структуры выбирает пользователь. Можно конечно сделать блок условий, как я писал в первом посту, но если полей 10? Писать 10 условий? Вот и задался вопросом выбора поля по введенной строке. Вариант с асоциативным массивом подходит, но тут уже не клеится с другой стороны. Почему передавать поле, а не экземпляр? Потому что нужно именно поле ![]() ![]()
0
|
Master of Orion
![]() |
||||||
30.05.2014, 23:24 | 13 | |||||
IGPIGP, ну на примере C# это сделать можно легко. Пример:
![]()
0
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
30.05.2014, 23:50 [ТС] | 14 |
Psilon, а на сценарных языках еще проще, но ведь не об этом
![]()
0
|
Master of Orion
![]() |
||||||
31.05.2014, 00:57 | 15 | |||||
Arkaniy, плюсы и шарп очень похожи, на самом деле. Шарп - это такие плюсы "с человеческим лицом"
![]() ![]() Не по теме: А сценарные языки вообще не ок. За исключением разве что sql и js :) Добавлено через 3 минуты Arkaniy, если верить гуглу, можно соорудить что-то вроде такого
2
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
31.05.2014, 01:31 [ТС] | 16 |
Psilon, с бустом вообще не знаком. Ладно, буду копать туда значит. Спасибо
![]() Не по теме: По поводу сценарных полностью согласен :drink:
0
|
Комп_Оратор)
![]() |
|
31.05.2014, 01:31 | 17 |
Пара в мапе может быть любой но определенной вначале. Может быть map<string, int> тоже.
А если: то есть: то и то и другое. Но мне кажется лучше бы задачу увидеть. Расскажите, интересно же. ![]()
1
|
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
|
|
31.05.2014, 01:46 [ТС] | 19 |
IGPIGP, про пару в мапе знаю, но мне же нужно чтобы ключ был стрингом, а значение перенным типом.
Я тот пост заметил, но попытал счастья в обход буста ![]() А задача, собственно, простая. Придумал себе структуру фильм. Поля такие как режиссер, год, страна и т.д. Как видно, есть и строковые поля, и чиловые. Нужно достать из массива только те фильмы, которые отвечают параметрам запроса пользователя. К примеру, все фильмы 2000 года. Вот и получается, что нужно смотреть именно по полю год. Вот это поле и нужно передать в ф-цию. С этим разобрались, да поля-то разных типов и не ясно было как в мап засунуть эти значения.
0
|
Тематические курсы и обучение профессиям онлайн Профессия Разработчик на C++ (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
Комп_Оратор)
![]() |
|
31.05.2014, 01:46 | 20 |
Дык, я сам грешу этим часто.
![]() Понимаешь, не пойму как пользователь поля выбирать будет. Для меня структура, запись, строка таблицы, это квант какой-то общей сущности. Матрица её описания, что ли. То есть у слона есть уши, хобот и хвост. Как тут выберешь. Если украшать его цветами, например, то придётся как-то по очереди. Я бы начал с ушей... А что-то можно и не украшать. Но это логика какой-то внутренней процедуры, - "эки-слоно-бана", например. А пользователю нужно бы разрешить выбирать слона. Большого, маленького или... жирафа. А процедура должна соответствовать выбору. Хотя в жизни всяко бывает. Хочется узнать зачем выбирать поле и передавать его по ссылке. ![]()
0
|
31.05.2014, 01:46 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Friend функции не имеют доступ к закрытым переменным Прямой доступ к видеопамяти Прямой доступ к видео памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |