Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наменования элемента структуры / 7 сообщений из 7, страница 1 из 1
19.03.2007, 15:15
    #34400513
жжёт
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
У меня есть структура
Код: plaintext
1.
2.
3.
4.
typedef struct {
        short save;
        short print;
} Options;
Options opt;
Требуется переменной типа string присвоить наименование элемента структуры. Т.е
Код: plaintext
1.
string strname = string("");
strname = ???opt.save???
Чтобы в результате
strname = "save" . Как такое сделать?
...
Рейтинг: 0 / 0
19.03.2007, 15:53
    #34400641
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
жжётУ меня есть структура
Код: plaintext
1.
2.
3.
4.
typedef struct {
        short save;
        short print;
} Options;
Options opt;
Требуется переменной типа string присвоить наименование элемента структуры. Т.е
Код: plaintext
1.
string strname = string("");
strname = ???opt.save???
Чтобы в результате
strname = "save" . Как такое сделать?
Можно только так
Код: plaintext
1.
2.
3.
# define TO_STRING(x) #x
...
  strname = TO_STRING(opt.save); // тоже что, strname = "opt.save";
...
Рейтинг: 0 / 0
19.03.2007, 17:38
    #34400968
жжёт
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
blinded
Можно только так
Код: plaintext
1.
2.
3.
# define TO_STRING(x) #x
...
  strname = TO_STRING(opt.save); // тоже что, strname = "opt.save";

Спасибо, работает.
Тогда в продолжение вопрос:
А как в цикле пробежаться по всем элементам структуры? Для чего надо. В структуре у меня хранятся данные и по нажатию кнопки я хочу выводить все данные структуры в поля с наименованием "edt_" + наименование элемента структуры:

Код: plaintext
1.
2.
3.
4.
5.
        TEdit *edtEdit;
        while(???opt???){
                string name = TO_STRING(opt.save);
                edtEdit = dynamic_cast<TEdit*>(FindComponent("edt_" + name.substr( 4 ,strlen(name.c_str())).c_str()));
                edtEdit->Text = ???;
        }
...
Рейтинг: 0 / 0
19.03.2007, 17:58
    #34401030
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
жжёт blinded
Можно только так
Код: plaintext
1.
2.
3.
# define TO_STRING(x) #x
...
  strname = TO_STRING(opt.save); // тоже что, strname = "opt.save";

Спасибо, работает.
Тогда в продолжение вопрос:
А как в цикле пробежаться по всем элементам структуры? Для чего надо. В структуре у меня хранятся данные и по нажатию кнопки я хочу выводить все данные структуры в поля с наименованием "edt_" + наименование элемента структуры:

Код: plaintext
1.
2.
3.
4.
5.
        TEdit *edtEdit;
        while(???opt???){
                string name = TO_STRING(opt.save);
                edtEdit = dynamic_cast<TEdit*>(FindComponent("edt_" + name.substr( 4 ,strlen(name.c_str())).c_str()));
                edtEdit->Text = ???;
        }

Ох-ох
Вообще-то по элементам структуры пробежать нельзя. Я тебя обманул, все что было сделано - работа препроцессора. А вам советую воспользоваться дебагером а не городить не пойми-что, все равнл не получитсяю Следующим вопросом станет: а что делать с вложенными структурами
...
Рейтинг: 0 / 0
19.03.2007, 18:13
    #34401059
жжёт
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
blinded жжёт blinded
Можно только так
Код: plaintext
1.
2.
3.
# define TO_STRING(x) #x
...
  strname = TO_STRING(opt.save); // тоже что, strname = "opt.save";

Спасибо, работает.
Тогда в продолжение вопрос:
А как в цикле пробежаться по всем элементам структуры? Для чего надо. В структуре у меня хранятся данные и по нажатию кнопки я хочу выводить все данные структуры в поля с наименованием "edt_" + наименование элемента структуры:

Код: plaintext
1.
2.
3.
4.
5.
        TEdit *edtEdit;
        while(???opt???){
                string name = TO_STRING(opt.save);
                edtEdit = dynamic_cast<TEdit*>(FindComponent("edt_" + name.substr( 4 ,strlen(name.c_str())).c_str()));
                edtEdit->Text = ???;
        }

Ох-ох
Вообще-то по элементам структуры пробежать нельзя. Я тебя обманул, все что было сделано - работа препроцессора. А вам советую воспользоваться дебагером а не городить не пойми-что, все равнл не получитсяю Следующим вопросом станет: а что делать с вложенными структурами
Да понял я, что это предпроцессор. Просто у меня в структуре очень много элементов и хотел избавиться от излишков кода. Может есть варианты хранить данные как-то по другому. Внешние "хранилища" типа БД и файлов не годятся
...
Рейтинг: 0 / 0
19.03.2007, 19:03
    #34401197
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
жжёт
Да понял я, что это предпроцессор. Просто у меня в структуре очень много элементов и хотел избавиться от излишков кода. Может есть варианты хранить данные как-то по другому. Внешние "хранилища" типа БД и файлов не годятся
О как припекло
Можно только все равно что структуру 2 раза определить. будет примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
struct SomeStruct : public EditableStruct
{
  std::string         someString;
  int                    someInt;
  AnotherStruct     anotherStruct;

  BEGIN_DESCRIPTION()
    STRING_FIELD(someString)
    INT_FIELD(someInt)
    STRUCT_FIELD(anotherStruct)
  END_DESCRIPTION
}
Только писанины будет немало. Оно тебе действительно надо? Ты подумай хорошенько.
...
Рейтинг: 0 / 0
19.03.2007, 22:29
    #34401476
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наменования элемента структуры
не надо таким страшным образом подстроку вырезать
вообщето src.substr(<pos>) отрезает до конца строки
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наменования элемента структуры / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]