Pybind11 - 返回指向 unique_ptr 容器的指针

2024-03-21

我一直在使用优秀的 pybind11 库,但遇到了困难。 我需要向 Python 返回一个指向不可复制对象的指针(因为该对象包含 unique_ptrs)。

一般来说,这在使用 return_value_policy::reference 的警告下效果很好。 但是,返回指向具有不可复制向量的对象的指针会导致编译错误。 在这种情况下,pybind 似乎想要执行复制,即使返回值策略是引用并且函数显式返回指针。

这是为什么?有解决方法吗?

我正在使用 VS2017 15.9.2 和最新的 pybind11 off master

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <vector>
#include <memory>

/* This fails to compile... */
struct myclass
{
    std::vector<std::unique_ptr<int>> numbers;
};

/* ...but this works
struct myclass
{
    std::unique_ptr<int> number;
};
*/

void test(py::module &m)
{
    py::class_<myclass> pymy(m, "myclass");

    pymy.def_static("make", []() {
        myclass *m = new myclass;
        return m;
    }, py::return_value_policy::reference);
}

我解决了这个问题

复制构造函数和赋值运算符需要显式删除,即添加以下内容可以让 pybind 认识到它无法进行复制

myclass() = default;
myclass(const myclass &m) = delete;
myclass & operator= (const myclass &) = delete;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pybind11 - 返回指向 unique_ptr 容器的指针 的相关文章

随机推荐

  • 如何在每个测试方法之前和之后执行sql脚本

    有一个 Sqlspring中的注释允许执行sql测试方法前后的代码 Test Sql init sql Sql scripts clean sql executionPhase Sql ExecutionPhase AFTER TEST M
  • 与 Kotlin 泛型的混淆

    我是 Kotlin 的新手 我正在尝试编写一些相当简单的代码 但是我不知道如何使用泛型来使其工作 我有一个Handler代表事物处理程序的特征 我无法更改处理程序的代码 因为它来自库 trait Handler
  • 当我构建多个 ProductFlavors 时,使用 Facebook SDK INSTALL_FAILED_CONFLICTING_PROVIDER

    我正在构建一个包含多个 Android 应用程序productFlavors 并使用Facebook SDK v4 1进行登录和分享内容 问题是 当我尝试在已安装相同应用程序 但风格不同 的设备上安装应用程序时 会引发错误 它不允许我安装第
  • 如何向 Quill.js 添加新格式(
    标签)?

    我想添加一个按钮来添加 hr 标记到quill js 测试版 http beta quilljs com docs quickstart editor 这里的fiddle https jsfiddle net Lgxkj4ag div sp
  • 如何多次发送文件

    有两个 C 项目 一个项目用于客户端 另一个项目用于服务器 第一步是运行服务器 然后选择一个目标文件夹 然后运行客户端项目 选择一些text txt发送到服务器的目标文件夹 只有客户端可以向服务器发送文件 Demo 1 choosing f
  • 为什么有些资源文件放在META-INF目录下

    我想知道为什么有些资源文件放在JAR中的META INF目录下 我总是将像 test properties 这样的资源放在根目录下 将它们放入 META INF 有什么好处吗 许多 Java EE API 都有一个约定 即当您将特定的配置
  • iText,Font、BaseFont 和 createFont() 发生了什么?

    关于 font 和 basefont 的情况对我来说有很多谜团 尤其是当涉及到构造函数时 iText 网站提供了这一行作为新字体的示例代码 BaseFont unicode BaseFont createFont c windows fon
  • Rails 4 - 如何使用枚举?

    我正在尝试在 Rails 4 上制作一个应用程序 我发布了这个问题并得到了一些建议 Rails 4 Simple Form 如何保存键和显示值 https stackoverflow com questions 36539924 rails
  • 如何使用 OpenCV 交换图像中的蓝色和红色通道

    我在交换图像的通道 特别是红色和蓝色 时遇到了一些问题 我正在使用 Opencv 3 0 0 和 Python 2 7 12 以下是我交换频道的代码 import cv2 img cv2 imread input car1 jpg The
  • 逗号运算符重置此

    在下面code https www typescriptlang org play src var 20x 20 3D 20 7B 20f 3A 20function 20 20 7B 20return 20this 20 3D 3D 3D
  • 将图像缩略图添加到网格布局中?

    我有一个图像列表 我需要将小缩略图添加到框架中 我目前有框架SpringLayout 如何使用滚动窗格在某些网格中添加缩略图 如时尚 照片列表可能很大 所以我需要一个滚动窗格 我不知道如何处理这个问题SpringLayout 我知道如何添加
  • 如何在Python中将pptx导出为图像(png、jpeg)?

    我用 Python 开发了一段小代码来生成 PPTX 文件 但我还想生成一张 PNG 或 JPEG 格式的幻灯片图片 from pptx import Presentation from pptx util import Inches im
  • 为 Blazor WASM 保存时重新编译 .razor 文件

    有没有办法让 Blazor WebAssembly 重新编译 razor文件更改 更新然后保存时 我已经习惯了这种情况在传统的 ASP NET Core MVC razor 视图以及客户端框架 如 Angular 中发生 在 ASP NET
  • DRAM 访问的性能计数器

    我想找回DRAM 存取次数在我的应用程序中 准确地说 我需要区分数据和代码访问之间 该处理器是一个Intel R Core TM i7 4720HQ CPU 2 60GHz Haswell 基于英特尔软件开发人员手册 第 3 卷 https
  • 无法在生产环境中实例化模块

    我刚刚将我的程序推送到 Heroku 上 并且我测试 Angular 的页面加载了以下错误 未捕获错误 injector modulerr 无法实例化模块 diceAngularApp 原因是 错误 injector unpr 未知提供者
  • python中使用numpy数组出现内存错误

    我收到此代码的以下错误 model lda LDA n topics 15 n iter 50 random state 1 model fit X topic word model topic word print type topic
  • 尝试将 AWS DynamoDB 与 Swift 3 结合使用时出现很多错误

    我是快速开发的新手 正在尝试合并后端 我认为 AWS 将是实现我想要完成的任务的好方法 我目前只是想获取他们为您创建的示例项目文件 它有很多错误 令人难以置信 我意识到 AWS 在 Swift 2 中创建文件 因此在 Swift 3 中运行
  • 如何使输入和选择字段的宽度相等

    在表单上 我有一个选择字段和两个输入字段 这些元素垂直对齐 不幸的是 我无法获得这些元素的相同宽度 这是我的代码
  • 在 ASP.Net MVC 中设置 Access-Control-Allow-Origin - 最简单的方法

    我有一个简单的操作方法 它返回一些 json 它在 ajax example com 上运行 我需要从另一个网站 someothersite com 访问该网站 如果我尝试调用它 我会得到预期的 Origin http someothers
  • Pybind11 - 返回指向 unique_ptr 容器的指针

    我一直在使用优秀的 pybind11 库 但遇到了困难 我需要向 Python 返回一个指向不可复制对象的指针 因为该对象包含 unique ptrs 一般来说 这在使用 return value policy reference 的警告下