问题标签 [pybind11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
560 浏览

c++ - 重载标记为 const 的类成员函数

我在重载已标记的类成员函数时遇到const问题,而未标记函数时没有问题const。此外,重载本身在纯 C++ 中也能正常工作。

以下失败

编译使用:

给出错误:

而当我删除const函数的标记时代码有效。

我应该如何执行这个重载?

0 投票
2 回答
7757 浏览

python - Pybind11 或 Boost.Python 或两者都不是——

我很好奇让 C++ 和 Python 相互交流的最灵活、最有效和最无缝的方法是什么。竞争者似乎是 Pybind11、Boost.Python,两者都不是(只需编写函数和包装器,如下所示)。

0 投票
2 回答
1021 浏览

c++ - Python bool 转换为 C++ (pybind11)

我正在尝试将 python bool 转换为 C++ bool,以便它可以用于比较,但无法成功获取它。

这是我到目前为止的代码(注释掉以前的试验以供参考)。任何帮助将不胜感激。到目前为止,它应该打印“True”和“False”,但我无法让它在 C++ if 语句中正确评估。

编辑:

似乎可以工作,但已被弃用。当我尝试使用建议的“f.is(Py_True)”时,它会产生错误error: reference to type 'const pybind11::detail::object_api<pybind11::handle>' could not bind to an rvalue of type 'PyObject *' (aka '_object *') if(f.is(Py_True)){ ^~~~~~~

0 投票
1 回答
710 浏览

python - 用 pybind11 包装 C++ void 函数

我有一个包含 void 函数的 C++ 类,这些函数采用通过引用传递的 STL 向量并修改其中一个向量的内容。例如:

void somefunction(std::vector<double> &result, std::vector<double> &array1, std::vector<double> &array2) {some calculations}

pybind11 绑定看起来像这样:

.def("somefunction", &somefunction)

我已经包含了 'pybind11/stl.h' 头文件,它处理 STL 容器和 python 等效项之间的自动转换,在 Python 中我somefunction使用 Python 列表调用,但我不确定 C++ 层是否可以修改resultPython 列表。

然后我的问题是如何为 C++ 函数编写 Python 绑定,这些函数修改通过 reference 和 return 传递的 STL 向量的内容void

0 投票
1 回答
579 浏览

python - 在 pybind11 (C++) 中使用内置的“打开”python 方法?

如何在 pybind11 中使用基本(“默认”/“内置”;不需要导入)python 方法?

列表、字典和其他一些确实具有内置兼容性,但我专门寻找的方法(打开)不包括通过导入。我知道解决它的一种方法是使用包装“open”的方法创建一个 python 文件,然后像调用任何导入的方法一样调用它,但如果可能的话,我更愿意直接在 C++ 中执行它(使用 pybind)否则半失败的目的。

任何帮助/建议将不胜感激。

0 投票
1 回答
6977 浏览

python - Python 和 C++:如何将 pybind11 与 Cmakelists (包括 GSL 库)一起使用

我希望能够将我的 C++ 代码称为 python 包。为此,我正在使用pybind11CMakelists(按照此示例https://github.com/pybind/cmake_example)。我的问题是我必须在代码编译中包含 GSL 库,而这些库需要显式链接器 -lgsl

如果我只是编译和运行 C++ 而不用 python 包装它,下面的 Cmakelists.txt 文件可以完成这项工作

但是当使用pybind11我发现的模板时不允许,add_executable因此 target_link_libraries不起作用。

我试过这个

但这会在建筑物中产生错误。

任何想法 ?

0 投票
1 回答
2116 浏览

c++ - Pybind11 - 在哪里放置 PYBIND11_MODULE

我目前正在玩 pybind11。我试图创建一个 C++ 类,然后将其传递给嵌入在我的 C++ 源代码中的 python 解释器。

我创建了一些虚拟类只是为了测试我将所有内容保存在单个源文件中的基本功能。这种方法编译并运行没有任何问题。

现在我将我的虚拟类Test分成了 Test.h 和 Test.cpp

测试.h

测试.cpp

主文件

将类Test放入新文件后,编译器无法再找到PyInit_TestModule(main.cpp 行:6),因为这是由PYBIND11_MODULE位于 Test.cpp 文件中的宏生成的(MSVS2017 错误:C2065)。

我尝试将PYBIND11_MODULE宏放入 Test.h。然而,这导致了一个链接器错误,指出“_PyInit_TestModule”已在 main.obj 中定义(MSVS2017 错误:LNK2005)

PYBIND11_MODULE宏放在 main.cpp 文件中是可行的。但是,我觉得一旦您将大量自定义模块定义放入 main.cpp,这将变得非常难以理解,或者更糟糕的是,您从不同的源文件启动了多个 Python-Interpreter,然后您需要将相同的定义放入所有文件中那些将是一团糟并且很可能变成链接器错误的文件。

你们当中有人遇到过同样的问题吗?你们是如何解决的?

0 投票
1 回答
706 浏览

python - PyBind11:使用指向字符串的指针的构造函数

我成功绑定了这个构造函数

我的问题是当我必须使用字符串数组时,如果我喜欢这样

它没有说:

所以我不知道如何从 python 传递类似于 const string* 的东西

0 投票
1 回答
1493 浏览

c++ - 如何使用 pybind11 和 cmake 链接 2 个模块

我正在尝试组合由 pybind11 创建的几个模块,但遗憾的是无法使其正常工作。希望有人可以帮忙。我试图尽可能地简化问题。

我正在尝试创建以下两个模块:

  • point: 可以直接调用
  • line: 可以直接调用,也可以使用point模块。

点.h:

点.cpp:

线.h:

线.cpp:

CMakeLists.txt:

现在运行以下python代码:

导致未定义的符号错误: Symbol not found: __ZN5pointC1Eddd

更新:

我还在 cmake 文件中尝试了以下几行: pybind11_add_module(point SHARED point.cpp) pybind11_add_module(line line.cpp) target_link_libraries(line PRIVATE point)

更新:更精确的错误:

0 投票
1 回答
2977 浏览

python - Pybind11:将 string* 参数传递给构造函数

在我不允许更改的 C++ 库中,我有一个如下所示的构造函数:

如果我只是绑定

它编译成功。问题是我不能通过 python 传递字符串*,因为例如如果我尝试在 python 上执行

它返回以下错误:

用户“R zu”好心地建议我写一个包装器,但我不知道怎么做。鉴于 python 中的内容类似于: ['x','y'],在 c++ 中被接受为std::list<std::string> ,我尝试编写以下代码:

但它返回给我2个错误:

很明显,我对如何克服这个问题有点困惑,我认为这与使用指向字符串的指针作为构造函数的参数有关。我再说一遍,我不能更改库,我只能创建适当的绑定。感谢您的关注