我正在开发一个 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) 我可以::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实际上保存的是有符号整数。