|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||
Приведение к структуре27.10.2014, 00:47. Показов 7930. Ответов 48
Метки нет (Все метки)
Не могу понять как привести, к примеру void* переменную, к структуре. И так же интересует как использовать приведённые перменный, дабы их передать в нужные функции.
К примеру базовая структура в WinAPi(из winuser.h):
Примерно я хотел бы что у меня получилось где то так:
0
|
||||||||||||||||
| 27.10.2014, 00:47 | |
|
Ответы с готовыми решениями:
48
Переменное кол-во членов в структуре. Возможно ли?
Приведение подобных слагаемых в алгебраических выражениях |
| 27.10.2014, 01:15 | |
|
Izual, кто память будет выделять в приведенном примере?
Про приведение типов читай в Алёна C++: Приведение типов в C++
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 27.10.2014, 02:03 [ТС] | ||
|
Мне сейчас хотя бы логику понять как вообще через указатель на структуру обращяться к членам структуры... 1. Как извлечь поля нужной структуры, имея только лишь название структуры. 2. Как использовать собственные переменные и указатели для манипуляций с структурами (ну и членами). 3. На сколько я видел в показанном вами блоге, один из юзеров написал смысл работы static cast, который был сделан через шаблон template, который я тоже использую (только немного в иных целях), но возможно этот же самый способ можно было бы использовать здесь. П.С. наверно мне надо немного времени чтоб ясно понять все включающие в себя под-вопросы, авось сам что то найду, но это сложно лишь потому что у меня ещё маловато опыта, потому и прошу с примерами по данной теме, чтобы хоть какое то представление иметь о способе реализации.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||
| 27.10.2014, 03:28 [ТС] | |||||||
|
Я недавно разбирал эту стрелочку... ![]()
Даже если я получу указатель на структуру и присвою его какой то переменной, то как мне члены структуры взять и использовать? Добавлено через 33 минуты Наткнулся тут на такое: http://publib.boulder.ibm.com/... plr022.htm Только не ясно, можно ли брать "не статические" члены класса\структуры... и вообще то ли это для перечисления и дальнейших действий относительно членов... (оч. сложно понять мне такое, только недавно с template начал разбираться)
0
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 27.10.2014, 08:41 | ||
|
Izual, я правильно понял, что ты хочешь обращаться к членам структуры по индексу, так, как будто это массив?
В общем нужны пояснения от тебя. Т.к. пока не до конца ясно в чем именно у тебя проблема.
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 27.10.2014, 09:58 | ||
|
0
|
||
| 27.10.2014, 11:12 | |
|
SatanaXIII, тут вы порите чушь.
1 Примеры выравнивания структуры; 2 Простая структура данных Во втором случае да же порядок расположения полей не гарантируется.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||
| 27.10.2014, 11:16 | ||||||
|
чей то я не понял
0
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||
| 27.10.2014, 18:33 [ТС] | ||||
|
Тоже думал об этом, только потом тоже наткнулся на "выравнивание структуры", пример которого привёл дима, и пришёл в тупик. ValeryS, представьте что вы пишите не руками в cpp файле, а работаете в программе-форме, в которой у вас есть доступ только к тем данным, которые вы описали изначально в вашем коде. Так вот для того чтоб обратиться как вы показываете - надо описать все поля всех структур дабы их использовать... Я конешно и парсер могу написать, быстро некоторые файлы, содержащие структуры - перебрать, сделать отдельный файл cpp вида и кинуть туда весь функционал для работы с структурами, но это не способ решения...
0
|
||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 27.10.2014, 18:56 | ||
|
Массивы в С++ так хорошо работают потому, что размер каждого элемента одинаков, поэтому можно организовать индексацию, смещаяя указатель на фиксированное значение, равное значению размера элемента. Размер полей в структуре - разный, плюс выравнивание, про которое уже сказали. В общем случае нельзя сказать на какое значение нужно сместить указатель, чтобы получить следующее поле. Это и есть главная проблема этой затеи.
1
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 27.10.2014, 18:56 [ТС] | |
|
П.С. Вообще мне не понятно почему шаблон template нельзя использовать в обратном порядке "вычленения" членов какой либо структуры... Ведь создание структуры\класса исходя из этого : http://msdn.microsoft.com/ru-r... 10%29.aspx сделано было именно через шаблон... В инете то что я хочу называют reflection (вроде бы), и типа это невозможно в С++, однако сроки давности сообщений могут уже не совпадать с действительностью, т.к. много нового появляется в новых версиях C++.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 27.10.2014, 19:00 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 27.10.2014, 19:17 [ТС] | |||
![]()
0
|
|||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||||||||
| 27.10.2014, 19:19 | ||||||||||||
|
по крайней мере я могу сказать как делаю это в IDE как только вижу обращение по смещению завожу структуру, пока фиктивную допустим 20 байт потом смотрю кто куда обращается допустим по смешению 0 записывается байт значит первый тип char правим( вс мысле ничего не правим он у нас и так байт )по смещению 4 записалось двойное слово( значит там int,знаковый или беззнаковый пока не известно,или float) потом анализирую кто как с этими числами общается и вывожу тип по смещениям 1 2 3 вообще не было обращений с большой долей вероятности можно сказать что это поля выравнивания тогда структура примет вид примерно такой
например char c[4]; оптимизатор вполне может поменять на int строку "123" которую мы записываем в массив он может вполне сконвертировать так
0
|
||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 27.10.2014, 19:24 [ТС] | ||
|
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||
| 27.10.2014, 19:27 | |||
|
выравнивание может быть на 1 , отсутствие выравнивания на 2 на 4 на 8 про большие не слышал все дело в том что процессору удобней работать с адресами кратными его разрядности поэтому 16 битные процессоры лучше работают с адресами выравненными на 2 (2 Байта 16 бит) 32 битные выравнивание на 4 64 битные выравнивание на 8 есть процессоры, это не Интел 80х86, которые вообще падают если данные не выравнены Добавлено через 2 минуты
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 27.10.2014, 19:38 | ||
|
Ладно, убеждать я тебя ни в чем не буду, время, надеюсь, сделает это за меня Успехов.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 27.10.2014, 19:38 [ТС] | ||
|
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 27.10.2014, 19:43 | |
|
1
|
|
| 27.10.2014, 19:43 | |
|
Помогаю со студенческими работами здесь
20
Мусорное значение в динамическом массиве в структуре. Что я делаю не так? Вопрос по структуре Запись функции в структуре Доступ к перечислению в структуре Редактирование записи в структуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|