|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||
Перенаправление указателя при перегрузке оператора в variadic template18.04.2015, 16:19. Показов 3288. Ответов 35
Метки нет (Все метки)
Есть вот такой вот код (сделан в vs2014):
Как видится всё это... Вот это должно по сути сработать... (пока что статически написан "0", в будущем конешно хотелось бы тоже поправить, чтоб можно было изменить, для этого int Cur хотел использовать)
И ещё, смежный вопрос, как в самом шаблоне проверить какой тип требуется и адрес. Т.е. хотелось бы чтоб в шаблоне можно было тоже следить за поведением переменных.
0
|
|||||||||||||||||||||
| 18.04.2015, 16:19 | |
|
Ответы с готовыми решениями:
35
Передача в метод по перегрузке оператора указателя на объект
Ошибка при перегрузке оператора << |
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 23.04.2015, 18:06 | |||
|
Знаешь, чтобы прояснить ситуацию, тебе надо задать другие вопросы. Например, тебе наверняка было бы полезно узнать как посмотреть какие именно типы попали в шаблон, чтобы разбираться по факту увиденного. а не по факту догадок. Интересно?
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||
| 23.04.2015, 18:26 [ТС] | |||||
|
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||||||||||||||||||||||||||||||
| 23.04.2015, 19:48 | ||||||||||||||||||||||||||||||||||||||||
|
Вот код:
Это параметры самой функции call (выделил жирным куда смотреть)
Причем твой второй якобы работающий пример, все равно не работает, т.к. возвращает мусор, вместо 123.32. А все потому, что результат функции atof - double. Ты знаешь как возвращаются числа double в ассемблере? Если проще будет понять на примере, то вот код.
Реализация функций такая:
Для первой функции код, сгенерированный компилятором будет таким
Для второй функции код такой:
В твоем коде картина та же.
0
|
||||||||||||||||||||||||||||||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 23.04.2015, 22:27 [ТС] | |||
|
Откуда все эти ASM вообще ты берёш?.. и чё за FPU)) Добавлено через 10 минут *Я так понимаю ты меня склоняеш к тому что ассемблерные вставки мне помогут... Ну пойду читать)
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 23.04.2015, 23:22 | ||||
Сообщение было отмечено Izual как решение
РешениеFPU
1
|
||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 23.04.2015, 23:31 [ТС] | ||
|
Жалко конешно что "просто из перегруженного оператора" нельзя сделать то что я хочу, ну значит есть куда стремиться ещё. Гора, Магомет уже идёт)))
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||||||||||||||||||||||||||||||||||||||
| 26.04.2015, 16:43 [ТС] | |||||||||||||||||||||||||||||||||||||||||||
|
DrOffset, да дизассембл интересная вещь... Жаль что твой пример, по крайней мере мне, сложно понять...
Собственно пока я тут копаюсь, накопалось оказывается, что без указания типа оператор double не срабатывает вообще. Т.е. на сколько я понял: С таким подходом:
Хотя почему они все dword я ещё не вкурил...Добавлено через 13 минут Ну и естественно из за этого сам шаблон уже по другому вопринимает данные. Без типа:
Добавлено через 7 минут Добавлено через 17 часов 12 минут
Лан, ушёл дальше ковыряться)
0
|
|||||||||||||||||||||||||||||||||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||||||||||||
| 28.04.2015, 21:39 [ТС] | ||||||||||||||||||||||||||
|
Перегруженный оператор uniona не дал в итоге мне возможность возвращять разные типы значений.
Может ли функция вернуть разный тип? Читал про перегрузку функций и шаблоны, но ни то ни другое пока не нашёл как применить в виду следующих причин: 1. Перегруженная функция обязана иметь разные типы или кол-во аргументов. А у меня аргумент всегда один (структура). 2. Шаблонная функция требует статически написать тип, например:
Подразумевается:
Использовать хочу для вызова своей функции:
0
|
||||||||||||||||||||||||||
|
What a waste!
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
|
|||
| 28.04.2015, 22:27 | |||
|
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||
| 28.04.2015, 22:34 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
What a waste!
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
|
|||
| 28.04.2015, 22:44 | |||
|
Добавлено через 3 минуты Добавлено через 4 минуты Либо некий обобщённый handle на ресурс и много switch-ей и cast-ов везде, где нужно знать тип объекта.
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||
| 28.04.2015, 22:58 [ТС] | |||||||
|
типа:
Если можно было бы создать одну функцию (с ~20 case под кол-во типов), в чём собственно и вопрос)
0
|
|||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 01.05.2015, 08:11 [ТС] | ||
|
Я так предполагаю, что дело происходит так: Ляляля, вызывается функция atod, наверно неважно как туда попали данные, сама функция сделает всё правильно не зависимо от того, union ли туда передали или нет и возвратит тоже правильно, но уже из возвращяемого значения (из стека наверно) будет произведена конвертация в тип union, а тут уже "как получится" (предполагаю что вернуло по инструкции long long(8 байт же), ведь для каждого типа свои блоки памяти для опр. перечней данных, ну типа где знак, где целая часть, где дробная и т.д.) В общем, используя ассемблер можно ли подменить тип возврата? Или может можно извлечь "не правильно скомпанованные данные" и поменять что то(в каких то регистрах) местами по нужной конструкции double, и будет как надо?...
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||
| 02.05.2015, 17:44 | ||||||||
|
Izual, не очень понятно что ты хочешь.
Но сразу скажу что сделать нельзя. Нельзя динамически, имея только указатель на функцию, узнать каким именно образом она возвращает данные. Через регистры общего назначения, FPU или еще как. Это можно сделать, только заранее зная прототип этой функции и правильную конвенцию вызова. И это касается не только С++ .
Вторая задача, еще более сложная. Нужно сделать так, чтобы на основе информации времени исполнения, сохраненной в нашем вариантном типе (это информация о том, какой там тип на самом деле), сгенерировался правильный вызов некой процедуры. От процедуры у нас есть только адрес, ну и конвенция вызова (если это вызовы win api, то она известна и едина для всех них). Вот это решить средствами С++ на 100% нельзя. И код, который будет осуществлять вызов нашей процедуры придется генерировать динамически прямо в памяти, а потом отдавать ему управление. Естественно, если процедура на самом деле имеет другие параметры или другую конвенцию вызова, мы, при таком подходе, становимся никак не защищены от падений и других спецэффектов. Т.е. все на наш страх и риск. Т.е. вторая задача потребует от тебя написать маленький компилятор внутри своей программы, который будет прямо в памяти делать код для вызова исходя из динамической информации о типе, сохраненном в variant. Есть готовые реализации таких вещей, у некоторых компиляторов есть api для JIT генерации кода, есть еще вот такая библиотека. Но если ты все-таки собрался все-все делать сам, приготовься к тому, что изучать придется очень много, и поверхностным ознакомлением не обойтись.
0
|
||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||||||||
| 05.05.2015, 11:07 [ТС] | ||||||||||||||||||||
|
Да и виртуальная функция не подойдёт, т.к. мне надо разный тип получать, а вирт. функции возвращяют всё по одному прототипу. Шаблон дал лиш часть, как видно, но не всё что надо... Сам же знаеш) Добавлено через 1 час 55 минут Сижу пока асм изучаю, пытаюсь свою теорию по поводу стэка подтвердить... Нашёл вот что:
0
|
||||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 05.05.2015, 13:33 | |||||
|
В зависимости от типа возврата, результат может быть в регистре (или регистрах) общего назначения, в специальных регистрах, на стеке. В регистре может быть как значение, так и адрес стековой памяти, где лежит большой объект. В общем виде нельзя, имея лишь адрес функции, сказать, каким именно способом она вернет значение. Вот немного материала по теме. Уж не обижайся.
0
|
|||||
| 05.05.2015, 13:33 | |
|
Ошибки при перегрузке оператора <<
Variadic template Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|