Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 5

Доступ к полям структуры по номерам

03.01.2015, 17:51. Показов 4752. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно присвоить полям структуры номера и организовать к ним доступ по этому номеру? Видел где-то идею сделать внутри структуры функцию, которая принимала бы номер в виде int а возвращала бы то, что хранится в соответствующем поле. Но, к сожалению, я нигде не могу найти как можно сделать так, чтобы функция могла возвращать значения разных типов. Т.е, например, идёт заход в функцию, дальше идёт ветвление через if - вернуть char или вернуть double. Не уверен, что так вообще можно сделать, но других способов ни найти, ни придумать пока не выходит. Реально мне нужно создать функцию, которая выводила бы через cout все поля структуры, которую она принимает в качестве аргумента, и при этом она должна уметь принимать разные структуры (т.е с разными названиями полей, то бишь - с разным шаблоном), собственно, для чего и нужно названия полей заменить на переменные цифры.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2015, 17:51
Ответы с готовыми решениями:

Получить доступ к полям структуры
здравствуйте,если свести проблему к локальному контексту, то есть код примерно такой: struct zeus { template<typename...

Доступ к полям структуры
Ребята, подскажите! Почему не получается получить доступ к полям структуры? //Хеш-таблица struct table ...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

13
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
03.01.2015, 18:04
Операцию [] определяешь и даёшь вывод. Только смотри, все поля одного типа должны быть (или приводиться этой операцией к одному типу).
Можно ещё сделать макрос разворачивающийся в DWORD func1(), char func2() и т.д. Тогда как раз будут разные типы.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 18:26
То, что вы хотите называется "рефлексия".
На языке с++ технология не доступна (ожидается статическая рефлексия с++17)

Однако, технология эмулируется в механизмах "сериализации", или в механизмах "атрибутов".

Вам стоит подглядеть дизайн в этих механизмах, и адаптировать технику под свои нужды.

Дизайн использования сериализации см boost::serialization
http://live.boost.org/doc/libs... index.html

Дизайн атрибутов (единственное более-мене приличное):
http://www.gamedev.ru/code/art... tes_in_cpp

Я знаком с автором.
Моё мнение об атрибутах - ненужный хлам.
Пример того, как плохо ложится "неродная для языка технология".


В целом, то, чего вы хотите - противоестественно для с++.
Это - тот случай, когда говорят: "если вам это понадобилось, значит вы хотите чего то очень странного".


Есть ещё механизмы "проперти", идеи создания которых могут помочь вам в решении.

Проперти на языке с++ не прижились в силу того, что не привносят в язык ровным счетом ничего нового, но увеличиваются зазря сложность кода.

Цитата Сообщение от FreeScore Посмотреть сообщение
Т.е, например, идёт заход в функцию, дальше идёт ветвление через if - вернуть char или вернуть double. Не уверен, что так вообще можно сделать, но других способов ни найти, ни придумать пока не выходит.
Этот момент довольно легко решается.
Смотрите в сторону boost::any, variant.

Если вы самостоятельно не смогли додуматься до возможного решения, то можно предположить, что вы не владеете магией шаблонов.

В этом случае, могу порекомендовать вам ещё раз пересмотреть свои взгляды на жизнь. Есть смысл отказаться от этой заранее провальной затеи.
2
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
03.01.2015, 19:00
Цитата Сообщение от hoggy Посмотреть сообщение
Проперти на языке с++ не прижились в силу того, что не привносят в язык ровным счетом ничего нового, но увеличиваются зазря сложность кода.
какая глупость... свойства зашкаливающая по полезности вещь, только из за отсутствия свойств я ушел с плюсов на шарп
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 19:12
Цитата Сообщение от Dark Byte Посмотреть сообщение
какая глупость... свойства зашкаливающая по полезности вещь, только из за отсутствия свойств я ушел с плюсов на шарп
С ваших слов получается, что:
если бы проперти на плюсах действительно были бы полезными и юзабельными, то вы бы не ушли на шарп.

Отсюда можно сделать прямой вывод: вы полагаете проперти на плюсах не юзабельными, бесполезными.

И что касается вашего тезиса: глупо считать полезной вещь на языке, если она настолько не юзабельная, что вы предпочли уйти на более высокоуровневый язык.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
03.01.2015, 19:16
Цитата Сообщение от hoggy Посмотреть сообщение
С ваших слов получается, что:
если бы проперти на плюсах действительно были бы полезными и юзабельными, то вы бы не ушли на шарп.
Отсюда можно сделать прямой вывод: вы полагаете проперти на плюсах не юзабельными, бесполезными.
И что касается вашего тезиса: глупо считать полезной вещь на языке, если она настолько не юзабельная, что вы предпочли уйти на более высокоуровневый язык.
что вы несете на плюсах нет проперти
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 19:22
Цитата Сообщение от Dark Byte Посмотреть сообщение
что вы несете на плюсах нет проперти
Плюсы - это язык, способный расширяться за счет библиотек написанных на нем самом.

Мой изначальный тезис был:
Существует множество различных реализаций проперти на языке.
Но ни одна из них не прижилась.
-------------------------------------------------

А вы чего несете? Вы утверждаете что проперти - фиерически классная вещь.
Но при этом почему то игнорируете тот факт, что на языке с++ от этой вашей "фиерически классоной" толку чуть больше, чем никакого.

Глупо рассказывать о том, какие классые проперти есть на шарпе, если ими все равно не воспользуешься на плюсах в разделе форума посвященном языку с++
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
03.01.2015, 19:26
Цитата Сообщение от hoggy Посмотреть сообщение
Существует множество различных реализаций проперти на языке.
я не рассматриваю в принципе весь этот хлам, естественно это не может прижиться, ибо юзать эти реализации крайне не удобно
Цитата Сообщение от hoggy Посмотреть сообщение
А вы чего несете? Вы утверждаете что проперти - фиерически классная вещь.
Но при этом почему то игнорируете тот факт, что на языке с++ от этой вашей "фиерически классоной" толку чуть больше, чем никакого.
да проперти такие какие они есть в шарпе это феерически классная вещь, очень обидно что мелкософту не хватает мозгов реализовать их в плюсах, так как они есть в шарпе
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 19:34
Цитата Сообщение от Dark Byte Посмотреть сообщение
ибо юзать эти реализации крайне не удобно
Вот именно!
Именно эту мысль я и хотел подчеркнуть говоря об атрибутах и пропертях.

"кране неюзабельное" - это лучшее, что ждет ТС на этом пути.

Потому что это - с++, и пока не будет моральной рефлексии, такое здесь противоестественно.

Цитата Сообщение от Dark Byte Посмотреть сообщение
очень обидно что мелкософту не хватает мозгов реализовать их в плюсах, так как они есть в шарпе
Дело не в микрософте. Дело в стандарте самого языка.
Пока комитет не узаконит некую технологию, она будет обречена быть не более, чем "расширением от компилятора". То есть, решение будет не переносимым.

visual studio, property (C++)
http://msdn.microsoft.com/en-u... k0thd.aspx
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.01.2015, 19:35
Цитата Сообщение от Dark Byte Посмотреть сообщение
очень обидно что мелкософту не хватает мозгов реализовать их в плюсах
внесите предложение в комитет по стандартизации, туда же входят одни дебилы, которые не могут догадаться до такого
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
03.01.2015, 19:39
Цитата Сообщение от hoggy Посмотреть сообщение
Дело не в микрософте. Дело в стандарте самого языка.
Пока комитет не узаконит некую технологию, она будет обречена быть не более, чем "расширением от компилятора". То есть, решение будет не переносимым.
хз че это за тупой комитет, но короче тупо это...
Цитата Сообщение от hoggy Посмотреть сообщение
visual studio, property (C++)
http://msdn.microsoft.com/en-u... k0thd.aspx
да знаю я эту бодягу, она все также не удобна как и юзерские реализации, ибо надо писать 2 функции отдельные геттер и сеттер и все бы ничего если бы не необходимость писать их в public части, т.е. сам смысл свойства пропадает... ну в принципе можно использовать, но лишние функции в списке напрягают слишком...
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.01.2015, 19:46
Цитата Сообщение от Dark Byte Посмотреть сообщение
хз че это за тупой комитет, но короче тупо это...
а в ассемблере и си их тоже нет... дибильные языки и все кто их составлял дибилы и уроды, да?
Ну так пишите свой "идеальный" язык
0
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 5
03.01.2015, 20:21  [ТС]
Постараюсь вынести из предложенных ресурсов максимум информации, спасибо за помощь.
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
03.01.2015, 21:52
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну так пишите свой "идеальный" язык
откровенно говоря у меня всегда была такая мечта, но едва ли мне хватит знаний и целеустремленности чтобы ее реализовать

Добавлено через 57 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
а в ассемблере и си их тоже нет... дибильные языки и все кто их составлял дибилы и уроды, да?
там и классов нет, это процедурно-ориентированные языки, их нельзя сравнивать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.01.2015, 21:52
Помогаю со студенческими работами здесь

Разработать процедуры/функции, обеспечивающие доступ к элементам таблицы по номерам строки и имени столбца
Разработать процедуры/функции, обеспечивающие доступ к элементам таблицы по номерам строки и имени столбца. В контрольной программе...

Доступ к полям
Подскажите пожайлуста!!!! Есть например форма, туды набиваются какте-то данные, возможно ли определенным пользователям запрещать или...

Сортировка по полям структуры
Необходимо сортировать параграфы по возрастанию. Структура имеет вид: struct gloss { char term; bool flag; int nom; } ...

Сортировка структуры по полям
Мне нужно было сделать базу данных контактов и сделать сортировку по фамилиям и номеру телефону. Базу я сделал ,используя шаблон стек. Но...

Цикл по полям структуры
Даны следующие структуры // информация public struct Info { .... public Phone phone; } // структура телефона public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru