0

最初は次のようなプロパティなしで構造体メンバーにアクセスしようとしていました:

メインファイル:

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を期待どおりに設定できませんでした. ' 期待される。"。次に、これらの変数にプロパティを追加して、次のようにアクセスできるようにしました。

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)
4

1 に答える 1

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 で変数を割り当てたい場合、デフォルト プロパティはプライマリとして呼び出されます。

この問題を解決するには、実際には 2 つの方法があります。カスタム プロパティを削除して tolua 認識関数 iside tolua_set_my_struct_t_var1 コールバックを変更するか、デフォルト プロパティを削除してカスタム プロパティをデフォルトとして使用するだけです。

于 2014-06-21T13:57:47.690 に答える