首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pybind11:绑定匿名枚举

要在 Pybind11 中绑定匿名枚举,您需要在 C++ 代码中定义枚举,然后使用 Pybind11 的 py::enum_ 类将其绑定到 Python

代码语言:javascript
复制
// example.cpp
#include <pybind11/pybind11.h>

namespace py = pybind11;

// 定义匿名枚举
enum {
    COLOR_RED,
    COLOR_GREEN,
    COLOR_BLUE
};

PYBIND11_MODULE(example, m) {
    // 绑定匿名枚举
    py::enum_<decltype(COLOR_RED)>("Color", m, py::arbitrary_order())
        .value("COLOR_RED", COLOR_RED)
        .value("COLOR_GREEN", COLOR_GREEN)
        .value("COLOR_BLUE", COLOR_BLUE)
        .export_values();
}

在这个例子中,我们定义了一个匿名枚举,包含三个颜色值。然后我们使用 py::enum_ 类将该枚举绑定到 Python,指定枚举名为 "Color"。

编译这个例子,您需要链接到 Pybind11 库。例如,如果您使用 CMake,可以创建一个 CMakeLists.txt 文件:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10)
project(example)

set(CMAKE_CXX_STANDARD 11)

find_package(pybind11 REQUIRED)

pybind11_add_module(example example.cpp)

然后运行 mkdir build && cd build && cmake .. && make 编译项目。

在 Python 中,您可以像这样使用绑定的匿名枚举:

代码语言:javascript
复制
import example

color_red = example.COLOR_RED
color_green = example.COLOR_GREEN
color_blue = example.COLOR_BLUE

print(color_red)  # 输出: 0
print(color_green)  # 输出: 1
print(color_blue)  # 输出: 2

注意,由于枚举是匿名的,我们使用 decltype(COLOR_RED) 作为模板参数传递给 py::enum_。这允许 Pybind11 推断枚举的底层类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET中绑定枚举类型

在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添 在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添加进去...这样做也行但如果我的枚举类型中的枚举值一旦改变,那么你就得满世界的去找然后再修改很麻烦。...这里我有反射动态的绑定枚举值就可以很方便的做修改了,代码如下: public enum Eume { 星期一, 星期二, 星期三, 星期四, 星期五 } 绑定方法: private void BinderDays...field = fields[i]; ListItem item=new ListItem(field.Name); days.Items.Add(item); } } OK这样就可以了,不过可惜的是枚举值显示转换不支持

1K10

交换机间路由、绑定多个路由键,匿名队列等

原来交换机和交换机之间也能绑定,路由消息.......匿名队列,独占队列,自动删除 独占exclusive队列,只允许创建该队列的connection和channel连接,在channel和connection断开连接之后,独占队列将自动删除,队列内的消息也会丢失...channel.exchangeBind("e-ab", "e-pre", "r-a"); channel.exchangeBind("e-ab", "e-pre", "r-b"); // 定义匿名队列并获取生成的匿名队列名称...String queue1 = channel.queueDeclare().getQueue(); // 将匿名队列与三个交换机绑定 channel.queueBind...创建e-pre交换机 创建e-a, e-b和e-ad交换机 将e-pre和三个交换机绑定,并且指定路由规格,注意这里使用的是#exchangeBind方法 创建匿名队列并与三个交换机绑定 发送1000条消息到

41720
  • 给Python算法插上性能的翅膀——pybind11落地实践

    值得一提的是,TensorFlow早期也是使用SWIG来封装Python接口,正式由于SIWG存在性能不够好、构建复杂、绑定代码晦涩难读等问题,TensorFlow已于2019年将SIWG切换为pybind112...++ & Python binding,交互代码简洁 对常见的C++数据类型如STL、Python库如numpy等兼容很好,无人工转换成本 only header方式,无需额外代码生成,编译期即可完成绑定关系建立...三行代码即可快速实现绑定,你值得拥有: PYBIND11_MODULE (libcppex, m) { m.def("add", [](int a, int b) -> int { return...同时,也支持通过def_static、def_readwrite来绑定静态方法或成员变量,具体可参考官方文档3。...暂不支持自动转换cv::Mat数据结构,因此需要手动处理C++ cv::Mat和Python端numpy之间的绑定。

    3.7K102

    AscendC从入门到精通系列(四)使用Pybind调用AscendC算子

    Pybind是一个用于将C++代码与Python解释器集成的库,实现原理是通过将C++代码编译成动态链接库(DLL)或共享对象(SO)文件,使用Pybind提供的API将算子核函数与Python解释器进行绑定...在Python解释器中使用绑定的C++函数、类和变量,从而实现Python与C++代码的交互。...在Kernel直调中使用时,就是将Pybind模块与算子核函数进行绑定,将其封装成Python模块,从而实现两者交互。...PYBIND11_MODULE是Pybind11库中的一个宏,用于定义一个Python模块。...它接受两个参数,第一个参数是封装后的模块名,第二个参数是一个Pybind11模块对象,用于定义模块中的函数、类、常量等。

    8010

    Python & C++ - pybind11 实现解析

    主要的类型有以下几个: - internals::default_meta_class: pybind11 最基础的类型, 像 tp_call, tp_setattro, tp_getattro 等自定义方法是在此处绑定的...rec_func->doc : "")); } 我们可以通过该类型的 __call__ 方法很方便的将 c++版的 get/set 方法与对应的 PyPropertyType 的 get/set 方法绑定...return obj; } 我们会看到其中调用到的 type->tp_new() 以及 type->tp_init(), 最终两者被关联到的是我们上面提到的 instance_base 类型创建时绑定的...__init__ 默认绑定的 pybind11_object_init(), 它的实现如下: pybind11_object_init() - 位于 class.h 中: /// An `__init_...C++ 对象的析构调用, 相关的代码调用链比较长, 此处不再展开了, 我们可以简单了解, 最终是通过前面介绍的 value_and_holder 再调用到 C++ 类注册时 type_record 上绑定的

    2.2K80

    msLDAPDump:一款功能强大的LDAP枚举工具

    关于msLDAPDump msLDAPDump是一款功能强大的LDAP枚举工具,该工具基于Python 3开发,可以帮助广大研究人员在目标域环境中快速实现LDAP枚举任务。...msLDAPDump通过将Python中的lpap3库封装在一个易于使用的接口中,简化了域环境中的LDAP枚举操作。...pip命令和项目提供的requirements.txt文件安装该工具所需的其他依赖组件: cd msLDAPDump pip install -r requirements.txt 工具使用 匿名绑定...用户可以通过该工具实现LDAP匿名绑定,并转储关于LDAP的基本信息,其中包括目标域名上下文、域控制器主机名等信息: 凭证绑定 用户可以使用一个有效的用户账号凭证或一个有效的NTLM哈希来绑定至...使用了凭证之后,我们将能够获取与匿名绑定请求的相同的数据,以及下列额外内容: 1、通过扫描目标系统开放的389和636端口实现子网扫描; 2、目标域基础信息; 3、用户; 4、组; 5、Kerberoastable

    41610

    绑定、安全模式与客户端凭证类型:总结篇

    ,所有的绑定都支持Message安全模式; 对于所有支持Message模式的绑定,除了NetMsmqBinding都支持Mixed模式; 除了WSDualHttpBinding,所有的绑定都支持Transport...(不包括不支持Transport安全模式的WSDualHttpBinding)支持所有类型的客户端凭证(实际上客户端凭证类型都是通过枚举HttpClientCredentialType表示); 除了BasicHttpBinding...在默认的情况下None作为客户端凭证类型(匿名客户端)之外,其它绑定的默认客户端凭证类型都是Windows; NetTcpBinding支持三种客户端凭证类型None、Windows和Certificate...三、系统预定义绑定对不同Message客户端凭证的支持 而不同的绑定针对于Message模式(或者Mixed模式)下的客户端凭证类型的支持就非常清晰了。...因为除了BasicHttpBinding采用BasicHttpMessageCredentialType枚举表示其支持的客户端凭证类型之外,其它所有的绑定(不包括不支持Message安全模式的NetNamedPipeBinding

    73680

    Python + Docker 还是 Rust + WebAssembly?这并不难选

    维护成本 假设我们想要“绑定” Python 和 C++ API,我们必须使用第三方库来自动化这个转换过程,例如 Pybind11。...图 2 中的示例代码展示了如何使用 Pybind11 “绑定” C++ 和 Python 程序。...不难看出,尽管 Pybind11 极大地简化了转换过程,但添加或删除任何 C++ API 都需要对转换代码进行相应的更改,并且更改的难度与变更内容密切相关。...集成复杂性 如图 2 所示,将 Python 与其他语言绑定通常需要仔细管理数据类型、内存分配和错误处理。...尽管有第三方库可以改进绑定任务,例如 Pybind11,但这种“粘合”过程仍然容易出错,并且需要对 Python 和所使用的其他语言有深入的了解。这会在一定程度上增加开发时间和风险。

    47210

    08 内部类(嵌套类)

    目前,见到的类、接口和枚举类型都定义为顶层类型。也就是说,都是包的直接成员,独立于其他类型。不过,类型还可以嵌套在其他类型中定义。...嵌套类型也可以理解为通过某种方式和其他类型绑定在一起的类型,不作为完全独立的实体真实存在。类型能通过四种不同的方式嵌套在其他类型中。...接口、枚举和注解不能定义为局部类型。 4. 匿名局部类/匿名内部类 匿名类也是一种局部类,但对 Java 语言来说没有有意义的名称。因此没有名字。接口、枚举和注解不能定义为匿名类型。...匿名局部类 / 匿名内部类 匿名内部类只能被使用一次,用来创建一个对象。它没有名字,没有构造方法,但可以根据参数列表,调用对应的父类构造方法。...与方法内部类一样,匿名内部类也可以访问外部类的所有变量和方法,可以访问方法中的 final 参数和局部变量。 匿名内部类能做的,方法内部类都能做。

    67210

    【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )

    枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII ....枚举类匿名类 ---- 枚举类抽象方法 : 枚举类中可以定义枚举常量的抽象方法 ; ① 实现方式 : 每个 枚举常量 必须在 匿名类中 实现此处定义的抽象方法 ; ② 定义位置 : 枚举常量的抽象方法要定义在枚举类最后.../** * 定义枚举常量的抽象方法 * 每个 枚举常量 必须在 匿名类中 实现此处定义的抽象方法 * 枚举常量的抽象方法要定义在枚举类最后 */...调用枚举常量的方法 ---- 使用 枚举类.枚举常量名.方法名() 可以调用枚举常量匿名类中的枚举方法 ; //调用枚举类的实现的自身定义的抽象方法 //好学生 Student.GOOD_STUDENT.say.../** * 定义枚举常量的抽象方法 * 每个 枚举常量 必须在 匿名类中 实现此处定义的抽象方法 * 枚举常量的抽象方法要定义在枚举类最后 */

    2.3K20
    领券