【问题标题】:tolua++ access structure member with properties具有属性的 tolua++ 访问结构成员
【发布时间】:2014-06-20 07:11:40
【问题描述】:

起初我试图访问没有属性的结构成员,如下所示:

主文件:

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 字符串,这会引发错误:“value is 'string' ; '表' 预期。"。 好的,然后我向这些变量添加了属性,以便能够像这里一样访问它们:

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;

问题:如您所见,我添加了能够访问这些变量并解决字符数组转换的属性,但即使它仍然抛出“值是'字符串';预期的'表'”。我不明白为什么?可能是错误还是我做错了? lua代码:

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

【问题讨论】:

    标签: c++ lua tolua++


    【解决方案1】:

    问题已解决,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_set_my_struct_t_var1 回调中更改 tolua 识别函数或删除默认属性并仅使用自定义属性作为默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多