Userdata не имеет "полей". может иметь метатаблицу, для которой вы можете определить метаметоды __index
и __newindex
. При наличии такой метатаблицы первая функция вызывается при считывании значения поля пользовательских данных, а вторая вызывается при присвоении значения полю извне (ud.some_field = 4
или эквивалентный). Если вы хотите, чтобы поля были доступны только для чтения (до некоторой степени), вы можете просто реализовать __index
, и попытки пользователя использовать __newindex
потерпят неудачу.
Таким образом, в вашем коде C ++ после создания userdata, вы можете использовать lua_setmetatable
, чтобы назначить ему таблицу, в которой определены эти методы. Конечно, эти функции должны будут получать доступ к реальному объекту C ++ из пользовательских данных и извлекать определенные c значения, которые вас интересуют.