|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||
Приведение к структуре27.10.2014, 00:47. Показов 7842. Ответов 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
|
|||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 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
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
|
||||||
| 27.10.2014, 11:16 | ||||||
|
чей то я не понял
0
|
||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||
| 27.10.2014, 18:33 [ТС] | ||||
|
Тоже думал об этом, только потом тоже наткнулся на "выравнивание структуры", пример которого привёл дима, и пришёл в тупик. ValeryS, представьте что вы пишите не руками в cpp файле, а работаете в программе-форме, в которой у вас есть доступ только к тем данным, которые вы описали изначально в вашем коде. Так вот для того чтоб обратиться как вы показываете - надо описать все поля всех структур дабы их использовать... Я конешно и парсер могу написать, быстро некоторые файлы, содержащие структуры - перебрать, сделать отдельный файл cpp вида и кинуть туда весь функционал для работы с структурами, но это не способ решения...
0
|
||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 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
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 27.10.2014, 19:00 | ||
|
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 27.10.2014, 19:17 [ТС] | |||
![]()
0
|
|||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
|
||||||||||||
| 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
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
|
|||
| 27.10.2014, 19:27 | |||
|
выравнивание может быть на 1 , отсутствие выравнивания на 2 на 4 на 8 про большие не слышал все дело в том что процессору удобней работать с адресами кратными его разрядности поэтому 16 битные процессоры лучше работают с адресами выравненными на 2 (2 Байта 16 бит) 32 битные выравнивание на 4 64 битные выравнивание на 8 есть процессоры, это не Интел 80х86, которые вообще падают если данные не выравнены Добавлено через 2 минуты
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 27.10.2014, 19:38 | ||
|
Ладно, убеждать я тебя ни в чем не буду, время, надеюсь, сделает это за меня Успехов.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 27.10.2014, 19:38 [ТС] | ||
|
0
|
||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,855
|
|
| 27.10.2014, 19:43 | |
|
1
|
|
| 27.10.2014, 19:43 | |
|
Помогаю со студенческими работами здесь
20
Мусорное значение в динамическом массиве в структуре. Что я делаю не так? Вопрос по структуре Запись функции в структуре Доступ к перечислению в структуре Редактирование записи в структуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|