Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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
嵌入式Python:从导入的模块获取func obj 我有一个Python模块,我从C++代码中导入(我正在嵌入Python)。这个模块包含一个函数“代码> CueTeE())/>代码>,我想在我的C++代码中得到它(即将它存储在 Boo::Python:对象< /Calp>实例)中。_C++_Python_Boost - Fatal编程技术网

嵌入式Python:从导入的模块获取func obj 我有一个Python模块,我从C++代码中导入(我正在嵌入Python)。这个模块包含一个函数“代码> CueTeE())/>代码>,我想在我的C++代码中得到它(即将它存储在 Boo::Python:对象< /Calp>实例)中。

嵌入式Python:从导入的模块获取func obj 我有一个Python模块,我从C++代码中导入(我正在嵌入Python)。这个模块包含一个函数“代码> CueTeE())/>代码>,我想在我的C++代码中得到它(即将它存储在 Boo::Python:对象< /Calp>实例)中。,c++,python,boost,C++,Python,Boost,这是我试过的。在C++代码中的指示行上出现运行时错误。发生此错误是因为在主命名空间中找不到“hero.create”函数 C++代码 namespace python = boost::python; // Standard Boost.Python code // Here I just create objects for the main module and its namespace python::object main_module( python::handle<

这是我试过的。在C++代码中的指示行上出现运行时错误。发生此错误是因为在主命名空间中找不到“hero.create”函数

C++代码

namespace python = boost::python;

// Standard Boost.Python code
// Here I just create objects for the main module and its namespace

python::object main_module(
    python::handle<>(python::borrowed(PyImport_AddModule("__main__")))
);

python::object main_namespace(main_module.attr("__dict__"));


// This is my code
//

python::exec("import hero", main_namespace, main_namespace);
python::object func(main_namespace["hero.create"]); // Run-time error
Entity ent = python::extract<Entity>(func());

// I also tried doing this, but it didn't work either...
// python::object func(main_namespace["hero"].attr("__dict__")["create"]);

// However, if I do this, all works fine...
// python::exec("from hero import create", main_namespace, main_namespace);
// python::object func(main_namespace["create"]); // No error

您需要执行
main\u名称空间[“hero”].attr(“create”)
。导入只在命名空间中创建一个名称,它是一个模块对象。名称中不能有点-
是一个getattr运算符-因此
hero.create
getattr(hero,'create')
相同


您还可以直接使用
boost::python::import
,而不是
exec
ing import语句。

您需要执行
main\u namespace[“hero”].attr(“create”)
。导入只在命名空间中创建一个名称,它是一个模块对象。名称中不能有点-
是一个getattr运算符-因此
hero.create
getattr(hero,'create')
相同


您也可以直接使用
boost::python::import
,而不是
exec
ing import语句。

如果打印出
hero,您会得到什么?您是否刚刚尝试了
main_名称空间[“hero”].attr(“create”)
?我敢打赌你不会使用
class.member
从C访问它。如果你打印出
hero,你会得到什么?您是否刚刚尝试了
main_名称空间[“hero”].attr(“create”)
?我敢打赌,您不会使用
class.member
从C访问它。感谢您的回答以及有关python::import的提示。现在看起来干净多了我提出了一个后续问题()。如果愿意的话,您可以看一看吗?谢谢您的回答以及关于python::import的提示。现在看起来干净多了我提出了一个后续问题()。如果你愿意的话,请你看一下好吗?
from entity import Entity

def create():
    ent = Entity()
    # ...
    return ent