элемент структуры доступа tolua ++ со свойствами

Я пытался получить доступ к элементу структуры без свойства сначала что-то вроде этого:

Основной файл:

typedef struct
{
char    var1[15];
char    var2[33];
} my_struct_t;

class MyClass {
MyClass()  { }
~MyClass() { }

my_struct_t     my_struct;
};

файл pkg:

class MyClass {
MyClass ()  { }
~MyClass () { }
my_struct_t     my_struct;
};

typedef struct
{
tolua_property char var1[15];
tolua_property char var2[33];
} my_struct;

Но это не сработало, проблема была в преобразовании char arry в строку lua, я не мог установить var1, как ожидалось, потому что это был char arry вместо lua string, что выдает ошибку: «value is ‘string’; ‘table «ожидается».
Хорошо, тогда я добавил свойства к этим переменным, чтобы иметь доступ к ним, как здесь:

typedef struct
{
string get_var1()
{
// const char* can be also used instead of std::string to pass this as string into a lua?
string str = var1;
return str;
}
string get_var2() {
string str = var2;
return str;
}
void set_var1(string p_name) {
strncpy(var1, p_name.c_str(), sizeof(var1));
var1[sizeof(var1) - 1] = 0;
}
void set_var2(string p_name) {
strncpy(var2, p_name.c_str(), sizeof(var2));
var2[sizeof(var2) - 1] = 0;
}
char    var1[15];
char    var2[33];
} my_struct_t;

проблемаКак вы можете видеть, я добавил свойства, позволяющие получить доступ к этим переменным и разрешить преобразование символов, но даже это все равно вызывает у меня «значение — это строка»; ожидается «таблица». чего я не понимаю почему? Это ошибка или я делаю это неправильно?
код Луа:

local packet  = MyClass:new()
packet.my_struct.var1 = "hi"    -- throws "value is 'string'; 'table' expected." even with property
print(packet.my_struct.var1)

0

Решение

Проблема решена, есть проблема внутри парсера tolua ++, который в любом случае делает свойство переменной по умолчанию, даже если вы объявляете свое собственное, например:

tolua_function(tolua_S,"set_var1",  tolua_lua_api_my_struct_t_set_var100); // my own property
tolua_function(tolua_S,"set_var2",  tolua_lua_api_my_struct_t_set_var200); // my own property
tolua_variable(tolua_S,"var1",  tolua_get_my_struct_t_var1, tolua_set_my_struct_t_var1); // default property
tolua_variable(tolua_S,"var2",  tolua_get_my_struct_t_var2, tolua_set_my_struct_t_var2); // default property

Когда вы хотите назначить переменную в LUA, свойство по умолчанию будет называться основным.

Чтобы решить эту проблему, на самом деле есть два способа: просто удалить свое пользовательское свойство и изменить функцию распознавания tolua iside tolua_set_my_struct_t_var1 callback или удалить свойство по умолчанию и просто использовать пользовательское свойство по умолчанию.

0

Другие решения


По вопросам рекламы [email protected]