Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Моя программа на c++ взаимодействует с Lua-скриптом. Lua-скрипт ничего не знает о классах и объектах c++. Нужно передать этому скрипту указатель на экземпляр какого-либо класса. Затем этот скрипт после своих действий должен обратно в c++ передать этот указатель и далее в c++ нужно дальше работать с этим объектом. Т.к. Lua не может работать с объектами C++, но может принимать и передавать числа, то хочу передать этот указатель в виде числа, а затем это число снова преобразовать в указатель на экземпляр класса. Не вдаваясь в детали Lua, хочу уточнить. Не смотря на то, что нижеследующий код прекрасно работает, верен ли в принципе такой код ? Есть ли в нём какие-то "подводные камни" ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. На последней строке ругается что "не существует подходящего конструктора для преобразования из "int" в "A" " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:00 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Поправка. Ничего нигде не ругается. Забыл удалить последнюю строку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:01 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15верен ли в принципе такой код ? Неверен. Указатель можно преобразовывать в intprt_t, но не в int: у последнего может не хватить разрядности. Надёжнее будет заводить массив указателей и передавать в Lua индекс нужного указателя в этом массиве. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:03 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovzxc15верен ли в принципе такой код ? Неверен. Указатель можно преобразовывать в intprt_t, но не в int: у последнего может не хватить разрядности. Надёжнее будет заводить массив указателей и передавать в Lua индекс нужного указателя в этом массиве. В Lua тип number вообще соответствует double на с++. Разрядности хоть отбавляй. Може привести и к int64. Всё равно не правильно ? P.S. Идею про массив понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:06 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Хотя да, можно в intprt_t, сразу не сообразил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:08 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15В Lua тип number вообще соответствует double на с++. Разрядности хоть отбавляй. Всего лишь 64 разряда или 15 значащих цифр. Верные грабли. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:13 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНадёжнее будет заводить массив указателей и передавать в Lua индекс нужного указателя в этом массиве. Надежнее только в том смысле, что можно проверить валидность указателя по таблице. Но для этого есть другие способы. И нужна ли эта проверка? И еще у меня есть подозрение, что преобразование (int)a приводит к потере разрядности. На 64bit указатель это long long. Компилятор обычно не предупреждает о неадекватном кастинге в стиле C. Если скрипту нужен именно int, то передача индекса коллекции указателей это выход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 14:42 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15, этот код неверен. точнее он содержит UB, как раз в части перевода указателя в целое. код даже может работать на конкретном компиляторе и конкретной платформе но что указатель влезет в int гарантии нет. в новых стандартах вроде бы есть тип данных, в который гарантированно влезает указатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 18:17 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovУказатель можно преобразовывать в intprt_t, но не в int: у последнего может не хватить разрядности. Хм. А мне Visual Studio показывает, что: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 18:29 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15мне Visual Studio показывает Потому что ты собираешь под 32-х разрядную платформу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 18:33 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Если использовать массив для хранения в нём указателей, то не лучше ли вместо intprt_t использовать тип LPVOID ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 19:17 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15Моя программа на c++ взаимодействует с Lua-скриптом. Lua-скрипт ничего не знает о классах и объектах c++. Нужно передать этому скрипту указатель на экземпляр какого-либо класса. Затем этот скрипт после своих действий должен обратно в c++ передать этот указатель и далее в c++ нужно дальше работать с этим объектом. Т.к. Lua не может работать с объектами C++, но может принимать и передавать числа, то хочу передать этот указатель в виде числа, а затем это число снова преобразовать в указатель на экземпляр класса. Не вдаваясь в детали Lua, хочу уточнить. Не смотря на то, что нижеследующий код прекрасно работает, верен ли в принципе такой код ? Есть ли в нём какие-то "подводные камни" ? Ты вообще не можешь передавать указатели на сложные структуры типа класса между языками, не понимая точно, что там происходит. С твоим уровнем понимания - забудь про такой подход. Передавай простые данные (например структуры) и конструируй внутри каждого языка классы из этих данных. Для начала просветления читай про ABI https://en.wikipedia.org/wiki/Application_binary_interface ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 20:07 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Зимарглzxc15Моя программа на c++ взаимодействует с Lua-скриптом. Lua-скрипт ничего не знает о классах и объектах c++. Нужно передать этому скрипту указатель на экземпляр какого-либо класса. Затем этот скрипт после своих действий должен обратно в c++ передать этот указатель и далее в c++ нужно дальше работать с этим объектом. Т.к. Lua не может работать с объектами C++, но может принимать и передавать числа, то хочу передать этот указатель в виде числа, а затем это число снова преобразовать в указатель на экземпляр класса. Не вдаваясь в детали Lua, хочу уточнить. Не смотря на то, что нижеследующий код прекрасно работает, верен ли в принципе такой код ? Есть ли в нём какие-то "подводные камни" ? Ты вообще не можешь передавать указатели на сложные структуры типа класса между языками, не понимая точно, что там происходит. С твоим уровнем понимания - забудь про такой подход. Передавай простые данные (например структуры) и конструируй внутри каждого языка классы из этих данных. Для начала просветления читай про ABI https://en.wikipedia.org/wiki/Application_binary_interface Ну хорошо. Давай-ка ты теперь "со своим уровнем понимания" и просветлением, расскажи, как в Lua передать класс с Memory Mapped File и Pipe Channel, и который бы само собой учитывал бы все критические секции, мьютексы, евенты и прочую синхронизацию потоков, а ещё и взаимодействие с другими классами. Которые тоже конструировать надо в Lua? Далее ты расскажи как в Lua сконструировать класс или структуру из таких данных и записать в MMF или в Pipe данные. Чтобы повысить свой уровень понимания про Lua, вот тебе для начала просветления читай: https://ru.wikipedia.org/wiki/Lua Не проще ли просто пробросить объект через Lua, пусть даже через массив указателей ? Тем более, что перед тобой только что, умные люди уже ответили и дали решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 21:18 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Мне не нужно в Lua работать со сложными объектами, мне нужно этот объект получить обратно, точнее указатель на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 21:21 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Тут об чём вообще речь идёт? Автор Lua "не читал" но осуждает! Почему "указатель" и "Lua" пишутся через запятую? При чем тут указатель? Сильно сомневаюсь что Lua умеет работать с memory напрямую и возможно из афтоского кода придётся выкосить все упоминания об указателях и оставить только жёстко определённые атомарные типы и реализовать сериализацию/маршалинг для сложных в том формате в котором эта Луа умеет понимать. Вобщем курить и еще раз курить доки как завещал Ленин в разрезе взаимодействия Lua и других ЯП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 22:02 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15, За "расскажи и сделай" я беру прилично денег. Удачи тебе в хождении по граблям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 22:20 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15Если использовать массив для хранения в нём указателей, то не лучше ли вместо intprt_t использовать тип LPVOID ? зачем? размер массива ограничен. если массив не больше 256 ты для индексов даже unsigned char можешь использовать он то точно в int влезет. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2015, 22:52 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
zxc15Зимарглпропущено... Ты вообще не можешь передавать указатели на сложные структуры типа класса между языками, не понимая точно, что там происходит. С твоим уровнем понимания - забудь про такой подход. Передавай простые данные (например структуры) и конструируй внутри каждого языка классы из этих данных. Для начала просветления читай про ABI https://en.wikipedia.org/wiki/Application_binary_interface Ну хорошо. Давай-ка ты теперь "со своим уровнем понимания" и просветлением, расскажи, как в Lua передать класс с Memory Mapped File и Pipe Channel, и который бы само собой учитывал бы все критические секции, мьютексы, евенты и прочую синхронизацию потоков, а ещё и взаимодействие с другими классами. Которые тоже конструировать надо в Lua? Далее ты расскажи как в Lua сконструировать класс или структуру из таких данных и записать в MMF или в Pipe данные. Чтобы повысить свой уровень понимания про Lua, вот тебе для начала просветления читай: https://ru.wikipedia.org/wiki/Lua Не проще ли просто пробросить объект через Lua, пусть даже через массив указателей ? Тем более, что перед тобой только что, умные люди уже ответили и дали решение. тут всё и сложно, и просто. Можно передавать указатели и париться с кроссплатформенностью С и Lia, и искать, где они не совпадают, а можно делать как в операционных системах внутренние таблицы объектов с идентификаторами, и отдавать идентификаторы а не указатели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 09:46 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovУказатель можно преобразовывать в intprt_t Подскажите пожалуйста где это указано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 02:45 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDimitry SibiryakovУказатель можно преобразовывать в intprt_t Подскажите пожалуйста где это указаноВ коде. Если intptr_t это typedef для указателя, то даже и преобразовывать не надо. Если intptr_t это typedef для целого числа размером в указатель - то и проблем с преобразованием нет, потому что указатель это сам по себе целое число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 05:57 |
|
||
|
Указатель в int и обратно. Возможно ?
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryпропущено... Подскажите пожалуйста где это указаноВ коде. Если intptr_t это typedef для указателя, то даже и преобразовывать не надо. Если intptr_t это typedef для целого числа размером в указатель - то и проблем с преобразованием нет, потому что указатель это сам по себе целое число. А можно ли ссылаться на следующее ? Working Draft, Standard for Programming Language C++. 3.7.4.3 Safely-derived pointers1 A traceable pointer object is — an object of pointer-to-object type, or — an object of an integral type that is at least as large as std::intptr_t, or — a sequence of elements in an array of character type, where the size and alignment of the sequence match that of some pointer-to-object type. 2 A pointer value is a safely-derived pointer to a dynamic object only if it has pointer-to-object type and it is one of the following: — the value returned by a call to the C++ standard library implementation of ::operator new(std::size_- t);37 — the result of taking the address of an object (or one of its subobjects) designated by an lvalue resulting from dereferencing a safely-derived pointer value; — the result of well-defined pointer arithmetic (5.7) using a safely-derived pointer value; — the result of a well-defined pointer conversion (4.10, 5.4) of a safely-derived pointer value; — the result of a reinterpret_cast of a safely-derived pointer value; — the result of a reinterpret_cast of an integer representation of a safely-derived pointer value; — the value of an object whose value was copied from a traceable pointer object, where at the time of the copy the source object contained a copy of a safely-derived pointer value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 07:50 |
|
||
|
|

start [/forum/search_topic.php?author=E%27lf&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
85ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 687ms |
| total: | 886ms |

| 0 / 0 |
