C++ python对象到本机c++;指针
我一直在玩弄将python作为一种嵌入式脚本语言用于我正在进行的项目的想法,我已经做了很多事情。但是,我似乎无法将Python扩展对象转换为本地C++指针。 这是我的课:C++ python对象到本机c++;指针,c++,python,boost,embedded-language,C++,Python,Boost,Embedded Language,我一直在玩弄将python作为一种嵌入式脚本语言用于我正在进行的项目的想法,我已经做了很多事情。但是,我似乎无法将Python扩展对象转换为本地C++指针。 这是我的课: class CGEGameModeBase { public: virtual void FunctionCall()=0; virtual const char* StringReturn()=0; }; class CGEPYGameMode : public CGEGameModeBase, publi
class CGEGameModeBase
{
public:
virtual void FunctionCall()=0;
virtual const char* StringReturn()=0;
};
class CGEPYGameMode : public CGEGameModeBase, public boost::python::wrapper<CGEPYGameMode>
{
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";
}
};
现在,我可以通过以下操作调用第一个函数:
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对象转换为它的基类指针。我可以把它作为一个对象,而是作为一个指针,这样一些非python代码就可以使用它。有什么想法吗?嗯,我不确定它是否会对您有所帮助,但我对Lua中的脚本也有同样的问题。我们从Lua创建对象,并希望通过C++来处理一些C++代码。我们做了以下工作:
- lua代码正在调用工厂方法来创建对象。该工厂方法1)给对象一个唯一的ID号,2)将它注册到C++映射中,将ID号映射到本地指针;李>
<> LI>每当Lua要传递一个指向C++代码的指针时,它会给出一个对象ID,而C++代码查找地图,用ID. < /LI>找到实际指针。
由于Python C++ MayLin列表中的斯特凡,我没有得到
super(Alpha, self).__init__()
来自构造函数调用,这意味着它从未创建父类。我想这是自动的:D
我遇到的另一个问题是将新类实例保存为全局变量,否则它会在超出范围时被清除
很高兴现在这将是好的,但我希望脚本扩展对象,使它看起来不那么好。只需要一些可以快速包装C++对象的东西。我会给它一个去吨好,除了我不能扩展类,然后分享与C++指针。(Lodle)作为一个开发人员,我很好奇,你能不能说明一下你需要做什么?扩展类。你可以创建和共享函数作为C++和CHAISScript之间的回调,如果这可以满足你的需要。@ LeLigTUS我发送电子邮件到你的网站。@ LeLigCUS查看它提供了一个简单的扩展对象的方法,和PR。很可能是Lodle在寻找什么。总之python更好。
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]() );
TypeError: No registered converter was able to extract a C++ pointer to type class CGEPYGameMode from this Python object of type Alpha
super(Alpha, self).__init__()