Python使用全局指针公开类 我正在编写一个C++游戏,我想添加一些动态加载的python脚本。有一个名为GameEngine的全球服务,它是一个全球唯一的ptr。我可以在代码的任何地方使用它来告诉游戏发生了什么。要简化: inline std::unique_ptr<class Game> GameEngine; class Game { public: void printHello() { std::cout<<"Hello World"<<std::endl; } };

Python使用全局指针公开类 我正在编写一个C++游戏,我想添加一些动态加载的python脚本。有一个名为GameEngine的全球服务,它是一个全球唯一的ptr。我可以在代码的任何地方使用它来告诉游戏发生了什么。要简化: inline std::unique_ptr<class Game> GameEngine; class Game { public: void printHello() { std::cout<<"Hello World"<<std::endl; } };,c++,pointers,game-development,boost-python,C++,Pointers,Game Development,Boost Python,揭露了这一类,比如: BOOST_PYTHON_MODULE(MyGameModule) { using namespace boost::python; class_<GameWrapper>("GameWrapper") .def("printHello", &GameWrapper::printHello) ; } 那么,我想调用C++时的脚本: Py_Initialize();

揭露了这一类,比如:

BOOST_PYTHON_MODULE(MyGameModule)
{
    using namespace boost::python;
    class_<GameWrapper>("GameWrapper")
        .def("printHello", &GameWrapper::printHello)
        ;
}

那么,我想调用C++时的脚本:

Py_Initialize();
auto module = python::import("MyGameModule");
auto script = module.attr("Script")();
script.attr("execute")();

但不幸的是,它崩溃了,因为从Python调用时指针为null。这个设计是基于Ron Penton的MUD游戏编程书,但他在那里使用了SWIG(事实上,对我来说不是100%可以理解),我决定尝试使用Boost.Python。是否有任何方法可以使此指针可行并影响已从加载的Python脚本运行的游戏?

能否使用
boost::Python::scope().attr
将指针导出为全局指针?能否使用
boost::Python::scope().attr
将指针导出为全局指针?
BOOST_PYTHON_MODULE(MyGameModule)
{
    using namespace boost::python;
    class_<GameWrapper>("GameWrapper")
        .def("printHello", &GameWrapper::printHello)
        ;
}
from MyGameModule import *

class Script():
    def execute(self):
        GameWrapper().printHello()
Py_Initialize();
auto module = python::import("MyGameModule");
auto script = module.attr("Script")();
script.attr("execute")();