![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| deBuger |
|
|||
|
Unregistered |
Ламерский вопрос.
Есть рабочий код: struct settings { char *element; }; int main(int argc, char ** argv) { settings *ss; char *a; char *b; a = "La-La-La\n"; b = "element"; ss -> element = a; printf(ss->element); return 0; } Хочется присваивать значение для члена (MEMBER) структуры не по конкретному названию (как ss -> element), а через переменную, ну типа ss -> b, а b содержит соответственно имя название "element", ну как в примере. Вот такая дурь. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Не понял. Как это? Если у тебя определена struct{char* element}, то нельзя обращаться как ss->а или ss->b. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| deBuger |
|
|||
|
Unregistered |
Неверное не так выразился.
Можно ли вместо явного указания члена структуры, каким либо образом, указать , что его имя надо взять из переменной. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Просто так в лоб - не получится. Можно переопределить оператор и его использовать, но это как-то странно выглядит. Или тогда уже просто Map использовать.
|
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
В общем случае это так:
-------------------- Волны гасят ветер... |
|||
|
||||
| deBuger |
|
|||
|
Unregistered |
Продолжаем разговор.
Может я че-то недогоняю, или мысли не могу выразить. Но вот не в тему код на РНР (синтаксис как в С): $a = "I'am A"; $b= "a"; printf($$b); который выводит I'am A а как такое-же сделать на С. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Что-то я не понял, в чем суть.
Ну вот так вот можно. И будет работать на ура #include <stdio.h> int main() { char* a = "I am Bill"; char* b = a; printf("%s\n\r",a); printf("%s\n\r",b); return 0; } |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
вопрос вовсе не ламерский... (просто непонятно ДЛЯ ЧЕГО ЭТО НАДО?)
Естественный выход (если ты хочешь сделать это как в PHP-примере) - это классы. Классы в к-х переопределены все операции (=,-,+,... и т.д.) и для каждой переменной - задается имя и значение. Что-то вроде Variant в D5. Но это хороший кусок программного кода, чтобы делать нахрапом. -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ага не ламерский, а просто не понятный. Но до меня кажись дошло в чем суть (благодаря примеру на PHP) - он хочет обращаться к переменной по ее имени. -------------------- Волны гасят ветер... |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
никогда не использовал <map> и не собираюсь впредь. Может я извращенец, но для меня легче что-то подобное написать самому.
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| HexoGenus |
|
||||||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Хммммм.... задачка приобрела зловещий смысл В свое время я пытался создать искусственный интелект используя Basic (вот умора) потом то же самое на паскале (вот долбежу то...) Вобщем с треском провалилась тогда моя затея (может лет через 5 снова попробую Вопрос вас удивил Все очень даже просто Представте у вас есть процесс выполняющийся на данной машине, или на сервере, вас интересует возможность не прерывая его в любой момент отследить значение любой его переменной, но количество этих самых переменных в вашем проекте растет не по часам а по минутам... А вы очень любопытные ... хочется то значение одной переменной узнать то другой... (Вобщем свитч на 400 переменных вам писать совсем не хочется а какие переменные вас заинтересуют через три минуты вы сами не знаете) Навел на мысль как это просто было бы реализовать если была бы возможность узнать значение переменной по имени? У вас есть функция которую вы можете вызывать из другого процесса и передавать ей имя переменной а эта программулька тут же вернет значение... И это только один из вариантов применения этой функции... Кстати говоря вопрос который очень похож на этот очень часто поднимается в разных форумах: "Как выполнить функцию по ее имени?" Ответы которые я встречал: 1. Невозможно так как после компиляции к функциям идет обращение по их адресам а не по именам... 2. Можно замутить огромный свитч который будет по имени возвращать функцию... 3. Можно все функции научить проверять имя по которому к ним обращаются и если оно не соответствует их собственному передавать управление по цепочке следующей ... (что то типа: я не Вася а ты 4. Способ который лежит в часто задаваемых вопросах на этом сайте : В Builder C++ задача получения адреса функции по ее символьному имени решается не просто, а очень просто. Правда с одним ограничением: эта функция должна быть опубликованным методом класса.
естественно, возможен обратный процесс получения символьного имени по адресу. Например, определим как называется функция, которая в данный момет является обработчиком события Button->OnClick;
А теперь сравните в первом случае сказали что это невозможно а в четвертом сказали что это очень просто.... Так может и к переменным по именам обращаться можно очень даже просто Вобщем если кто найдет способ то я с удовольствием занесу его в свою копилочку на будущее --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
||||||
|
|||||||
| Fantasist |
|
||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Что-о-о?? Но посуществу, если ты хочешь стать проффессиональным программистом на С++, то с STL придется разобраться.
Для этого существуют отладчики и отладачная информация. Но это по большому счету роли не играет - обычно использования глобальных переменных не велико, а локальные переменные существуют то недолгое время, пока не кончится соответсвующий контекст выполнения. И в разных контекстах я могу использовать одно и то же имя.
Это уже использование RTTI(Run-Time Type Information) в Builder. Реально такое очень редко применяется. Это слишком дорого и это просто не правильно. Так никто не делает.
Можно так же просто. Делаешь published property и сможешь обращаться к нему по имени. Но все это ерунда. -------------------- Волны гасят ветер... |
||||||||
|
|||||||||
| HexoGenus |
|
||||||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Попробуй при помощи отладчика отследи как выполняется приложение на машине в другой части города А насчет малого числа переменных... как бы не так на каждой форме их может быть тьма... и на время существования формы они очень даже существуют
Да просто задача редкая мало кто пишет не просто алгоритмы а алгоритмы-интерпритаторы входящих команд, что ты предложишь самому все написать?
Хмммммм..... Разве к свойствам можно обращаться по имени в ходе выполнения программы --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
||||||
|
|||||||
| Fantasist |
|
||||||||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Вполне. Если есть соответствующий доступ по сети. Но это очень редкий случай.
Это совсем, НЕ глобальные переменные. Сама форма может быть глобальной переменной, но я могу написать отдельный класс формы, и использовать там те же имена для переменных. Какое тогда имя выбирать? Внутри функций я тоже могу те же имена использовать.
Ага. Что-то за супер задача у тебя? Тогда вот что - пиши лучше сразу новый язык и интерпритатор/компилятор к нему. Будет он делать все что ты захочешь. А что такое "алгоритмы-интерпритаторы входящих команд" непонял.
Примерно так же как методов. Смотри модуль Classes - TWriter::WriteProperties. Eще раз повторю, если уж захотел извращений, то сделай их по нормальному. примерно так:
Потом и добавляй где-нибудь:
-------------------- Волны гасят ветер... |
||||||||||||
|
|||||||||||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
2 Fantasist - ВОТ ЭТО МОЁ - смотри как это сделать на BCB5... На С++ можно тоже запросто (Delphi труднее).
Оценивай... TStringList *VALS; typedef struct vINT{ int vVAL; }vINT, *LPvINT; int& V(char *s) { if(!VALS) VALS = new TStringList; int idx = VALS->IndexOf(s); if(idx == -1) idx = VALS->AddObject(s,(TObject*)(new LPvINT)); return LPvINT(VALS->Objects[idx])->vVAL; } void __fastcall TForm1::Button1Click(TObject *Sender) { V("hello") = 5; V("gotta") = 10; V("all") = V("hello") + V("gotta"); Caption = IntToStr(V("all")); } повторяю тебя - "лучше использовать свои мозги, чем чужой бредовый код" -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |