объект Python на нативный указатель c ++

Мне нравится идея использовать Python в качестве встроенного языка сценариев для проекта, над которым я работаю и у которого есть большинство вещей. Однако я не могу преобразовать расширенный объект Python обратно в родной указатель C ++.

Итак, это мой класс:

class CGEGameModeBase
{
public:
    virtual void FunctionCall()=0;
    virtual const char* StringReturn()=0;
};

class CGEPYGameMode : public CGEGameModeBase, public boost::python::wrapper
{
public:
    virtual void FunctionCall()
    {
        if (override f = this->get_override("FunctionCall"))
            f();
    }

    virtual const char* StringReturn()
    {
        if (override f = this->get_override("StringReturn"))
            return f();

        return "FAILED TO CALL";
    }
};

Повышение упаковки:

BOOST_PYTHON_MODULE(GEGameMode)
{
    class_("CGEGameModeBase", no_init);

    class_("CGEPYGameMode", no_init)
        .def("FunctionCall", &CGEPYGameMode::FunctionCall)
        .def("StringReturn", &CGEPYGameMode::StringReturn);
}

и код Python:

import GEGameMode

def Ident():
    return "Alpha"

def NewGamePlay():
    return "NewAlpha"


def NewAlpha():
    import GEGameMode
    import GEUtil

    class Alpha(GEGameMode.CGEPYGameMode):
        def __init__(self):
            print "Made new Alpha!"

        def FunctionCall(self):
            GEUtil.Msg("This is function test Alpha!")

        def StringReturn(self):
            return "This is return test Alpha!"

    return Alpha()

Теперь я могу вызывать первые функции нормально, выполнив это:

const char* ident = extract< const char* >( GetLocalDict()["Ident"]() );
const char* newgameplay = extract< const char* >( GetLocalDict()["NewGamePlay"]() );

printf("Loading Script: %s\n", ident);
CGEPYGameMode* m_pGameMode = extract< CGEPYGameMode* >( GetLocalDict()[newgameplay]() );

Однако, когда я пытаюсь преобразовать класс Alpha обратно в его базовый класс (последняя строка выше), я получаю ошибку повышения:

TypeError: No registered converter was able to extract a C++ pointer to type class CGEPYGameMode from this Python object of type Alpha

Я много занимался поиском в сети, но не могу понять, как преобразовать объект Alpha в указатель его базового класса. Я мог бы оставить его как объект, но вместо этого иметь его как указатель, чтобы его мог использовать некоторый код, не поддерживающий Python. Есть идеи?

Ответы на вопрос(3)

Ваш ответ на вопрос