LuaBridge и Наследование

Я пытаюсь передать объект указателем базового класса из C ++ в Lua, используя LuaBridge. И производный, и базовый класс зарегистрированы в LuaBridge правильно.

На стороне C ++:

// Assume both Foo and FooBase are registered properly with LuaBridge,
// exposing the a, b, and c properties

struct FooBase
{
int a;
// ...
};

struct Foo : public FooBase
{
int b;
int c;
// ...
};

// ... other code ...

void Bar(const FooBase* foo)
{
// Assume that 'foo' is a pointer to a valid 'Foo' object
luabridge::LuaRef ref = luabridge::getGlobal(L, "bar");
ref(foo);
}

На стороне Lua:

function bar(foo)
foo.a -- This is ok
foo.b -- This is nil
end

Как я могу «свергнуть» из FooBase* в Foo* в луа? Lua / LuaBridge даже поддерживает это?

1

Решение

Вероятно, нет, и необходимость сделать это мог показать ошибку дизайна в вашем коде. Преформуя приведение в C ++, вы знаете о типах гораздо больше, чем Lua, так что либо функция Bar принимает Foo *, либо выполняет downcast перед вызовом функции.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]