小编Bar*_*ski的帖子

在 C 扩展中定义 Python 枚举 - 我这样做对吗?

我正在开发一个 Python C 扩展,我想公开一个完全在 C 中定义的自定义枚举(如:继承自 enum.Enum 的类)。

事实证明这不是一个微不足道的任务,并且继承使用的常规机制.tp_base不起作用 - 很可能是由于 Enum 的元类没有被引入。

基本上我正在尝试这样做:

import enum

class FooBar(enum.Enum):
    FOO = 1
    BAR = 2
Run Code Online (Sandbox Code Playgroud)

在C.

经过大量深入研究 cpython 的内部结构后,这就是我想到的,包装在一个示例可构建模块中:

#include <Python.h>

PyDoc_STRVAR(module_doc,
"C extension module defining a class inheriting from enum.Enum.");

static PyModuleDef module_def = {
    PyModuleDef_HEAD_INIT,
    .m_name = "pycenum",
    .m_doc = module_doc,
    .m_size = -1,
};

struct enum_descr {
    const char *name;
    long value;
};

static const struct enum_descr foobar_descr[] = {
    {
        .name = "FOO",
        .value = …
Run Code Online (Sandbox Code Playgroud)

c python python-c-api python-3.x python-extensions

14
推荐指数
1
解决办法
638
查看次数

在 std::any 中存储无符号整数

我可以::std::any保留一个无符号整数吗?就像是:

::std::any a = 4;
unsigned int x = ::std::any_cast<unsigned int>(a);
Run Code Online (Sandbox Code Playgroud)

导致::std::bad_any_cast异常,因为a实际上保存的是有符号整数。

c++ stl

3
推荐指数
1
解决办法
275
查看次数

标签 统计

c ×1

c++ ×1

python ×1

python-3.x ×1

python-c-api ×1

python-extensions ×1

stl ×1