Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ python对象到本机c++;指针_C++_Python_Boost_Embedded Language - Fatal编程技术网

C++ 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

我一直在玩弄将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";
    }
};
现在,我可以通过以下操作调用第一个函数:

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++代码。我们做了以下工作:

    所有对象的东西都是用C++编写的,包括构造函数、析构函数和工厂方法;李>
  • lua代码正在调用工厂方法来创建对象。该工厂方法1)给对象一个唯一的ID号,2)将它注册到C++映射中,将ID号映射到本地指针;李> <> LI>每当Lua要传递一个指向C++代码的指针时,它会给出一个对象ID,而C++代码查找地图,用ID. < /LI>找到实际指针。
可能不是你要找的答案,但是看看你在C++应用程序中的嵌入。

根据他们的网站,

ChaiScript是第一个也是唯一一个 从 在C++中兼容 介意这是一个受ECMAScript启发的, 嵌入式函数式语言

ChaiScript没有元编译器,没有 库依赖项,无生成系统 要求和无遗留行李 任何一种。At可以无缝地与 你可以向它公开的任何C++函数。信息技术 不必明确告知 关于任何类型,它都是函数 中心的

使用ChaiScript,您可以按字面意思 通过以下方式开始编写应用程序脚本 将三行代码添加到 编程,而不修改您的构建 一步也没有


由于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__()