|
ffi создание указателя на многомерный массив |
|
|
Cockney |
8.8.2022, 1:38
|
Master
Сообщений: 1.394
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 20893
Пользователь №: 16.156
|
А в чем сакральный смысл каста именно к размерности ? Каст к ** и дальше индексируй.
Reinterpret_cast - "я тут главный, я знаю что это работает, повинуйся, машина" если оно не кастит, то вряд ли это возможно... но т.к. в плюсах возможно все, то просто сам каст будет иметь зубодробительную длину
А каст луа многое может делать, копирование памяти там, или еще че, это же не просто указка на уровне компиляции, это работа с объектами, имхо
|
|
|
|
Cockney |
8.8.2022, 2:11
|
Master
Сообщений: 1.394
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 20893
Пользователь №: 16.156
|
|
|
|
|
DarkMaster |
8.8.2022, 2:39
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Вот смотри, у нас есть некоторый *int и последовательно записаны числа 1, 2, 3, 4, 5, 6, 7, 8, 9. Если мы этот инт прикастуем просто к **int - нам это ничего не даст, т.к. мы не сможем обратиться по индексу. Ну прикастовали, какое значение будет у элемента [2][2]? Это может быть и 4 и 5 и 6 и т.д, т.к. мы не сказали чему равна вторая размерность, а **int этой информации не содержит. Поэтому мне и нужен указатель на некоторый массив с фиксированной шириной, чтобы обращаться по индексам.
Сообщение отредактировал DarkMaster - 8.8.2022, 4:16
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
8.8.2022, 18:12
|
Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27708
Пользователь №: 11.279
|
Если все-таки будет желание. Наткнулся на такую весч: Цитата -- Declare a struct with a parameterized field type and name: ffi.cdef([[ typedef struct { $ $; } foo_t; ]], type1, name1)
-- Anonymous struct with dynamic names: local bar_t = ffi.typeof("struct { int $, $; }", name1, name2) -- Derived pointer type: local bar_ptr_t = ffi.typeof("$ *", bar_t)
-- Parameterized dimensions work even where a VLA won't work: local matrix_t = ffi.typeof("uint8_t[$][$]", width, height) Собственно из вышеописанного: Код local arr = ffi.typeof("int[$][$]", 10, 10) log(tostring(arr)) arr[1][1] = 1 Создается некоторый объект, который вроде как указатель на правильный массив, но без адреса. Соответственно присвоение ничего не дает и выбивает ошибку, что не может индексивать чилом данный ctype.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
8.8.2022, 18:26
|
Master
Сообщений: 1.394
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 20893
Пользователь №: 16.156
|
Цитата(DarkMaster @ 8.8.2022, 18:12) Если все-таки будет желание. Наткнулся на такую весч: Собственно из вышеописанного: Код local arr = ffi.typeof("int[$][$]", 10, 10) log(tostring(arr)) arr[1][1] = 1 Создается некоторый объект, который вроде как указатель на правильный массив, но без адреса. Соответственно присвоение ничего не дает и выбивает ошибку, что не может индексивать чилом данный ctype. Не, создается объект-тип, который дальше должен использоваться как Код void pass_arr_in_c(arr arrParam) , например, или Код , ну а дальше из луа обращаешься
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|