我在考虑使用python作为一个项目的嵌入式脚本语言,这是我正在做的,并且已经完成了大部分工作。然而,我似乎无法将python扩展对象转换回本机c++指针。在
这是我的课:
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";
}
};
增强包装:
^{pr2}$以及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类转换回基类(上面最后一行)时,我得到了一个boost错误:
TypeError: No registered converter was able to extract a C++ pointer to type class CGEPYGameMode from this Python object of type Alpha
我已经在网上做了很多搜索,但是还不知道如何将Alpha对象转换成它的基类指针。我可以将它保留为一个对象,而是将其作为一个指针,以便一些不了解python的代码可以使用它。有什么想法吗?在
可能不是你正在寻找的答案,但是看看ChaiScript,以便嵌入到C++应用程序中。在
根据他们的网站
多亏了python c++邮件列表中的Stefan,我失踪了
来自构造函数调用,这意味着它从未生成父类。以为这是自动的:D
我唯一遇到的另一个问题是将新类实例保存为全局变量,否则它会在超出范围时被清理掉。在
现在很开心
嗯,我不确定它是否能帮到你,但是我在Lua中遇到了同样的问题。我们从Lua创建了对象,并需要一些c++代码通过指针来处理这些对象。我们做了以下工作:
相关问题 更多 >
编程相关推荐