【发布时间】:2014-06-27 22:11:38
【问题描述】:
我正在使用 LuaBind 将 c++ 类公开给 Lua 脚本。我遇到了无法将基类转换为其派生类的问题。我有一个返回基类型对象的工厂类。我试图用这些对象设置一些从基类型派生的类型的字段。我已经将我的问题归结为一些测试代码,可以重现问题并更清楚地解释它。
c++ 类定义
class Base {
public:
virtual void say() { cout << "a" << endl; }
};
class Derived : public Base {
public:
virtual void say() { cout << "b" << endl; }
};
class TestClass {
public:
Base *GetBase() { return (Base *)new Derived(); }
Derived *derivedRef;
};
c++ LuaBind绑定代码
module(L)[
class_<Base>("Base")
.def(constructor<>())
.def("say", &Base::say)];
module(L)[class_<Derived, Base>("Derived")
.def(constructor<>())
.def("say", &Derived::say)];
module(L)[class_<TestClass>("TestClass")
.def(constructor<>())
.def("GetBase", &TestClass::GetBase)
.def_readwrite("derivedRef", &TestClass::derivedRef)];
Lua 代码
testClass = TestClass()
base = testClass:GetBase()
testClass.derivedRef = base
错误
occurred executing a LUA script: No matching overload found, candidates:
void <unknown>(TestClass&,Derived* const&)
有谁知道在 LuaBind 中是否可以向上转换,如果可以,我应该怎么做?
【问题讨论】:
标签: c++ binding casting lua luabind