1

そのため、この問題は何日も私を混乱させてきました。私は提案された解決策を残しませんでしたが、うまくいきませんでした。問題を単純化するために、luabind で、次の例のように、別のクラスからオブジェクトを返す関数を持つクラスをエクスポートしようとします。

class A
{
public:
    int x;
};
class B
{
    A m_a;
public:
    A* getA(){return &m_a;} // I am curious about this function
}*g_b=new B();

およびエクスポートされたモジュール:

void ExportToLua(lua_State* L)
{
    module(L)[
        class_<A>("A")
            .def(constructor<>())
            .def_readwrite("x",&A::x)
            ,
        class_<B>("B")
            .def(constructor<>())
            .def("getA",(A*(B::*)())&B::getA)
    ];
    luabind::globals(L)["g_B"]=boost::ref(g_b);
}

次のようにluaスクリプトを呼び出すと、シンプルで明確になります。

xa=g_B:getA()

print(tostring(xa.x))

次のエラーが表示されます。

一致するオーバーロードが見つかりません。候補: A* getA(B&)

で提案されているように typeid.hpp にパッチを適用しようとしました: Luabind から C++ メンバー関数を呼び出すと、「一致するオーバーロードが見つかりません」 が発生しますが、問題は解決しませんでした。

4

0 に答える 0