そのため、この問題は何日も私を混乱させてきました。私は提案された解決策を残しませんでしたが、うまくいきませんでした。問題を単純化するために、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++ メンバー関数を呼び出すと、「一致するオーバーロードが見つかりません」 が発生しますが、問題は解決しませんでした。