Я использую LuaBind для предоставления классов С++ сценариям Lua. Я столкнулся с проблемой невозможности привести базовый класс к его производному классу. У меня есть фабричный класс, который возвращает объекты базового типа. Есть некоторые поля типа, производного от базового типа, которые я пытаюсь установить с помощью этих объектов. Я свел свою проблему к некоторому тестовому коду, который может воспроизвести проблему и объяснить ее яснее.
Определения классов С++
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)];
Луа-код
testClass = TestClass()
base = testClass:GetBase()
testClass.derivedRef = base
Ошибка
occurred executing a LUA script: No matching overload found, candidates:
void <unknown>(TestClass&,Derived* const&)
Кто-нибудь знает, возможно ли повышение уровня в LuaBind, и если да, то как мне это сделать?