c++扩展中的Python哨兵
Python sentinel in C++ extension
我正在开发一个用c++编写的Python扩展模块。
根据Python文档,模块方法表应该这样写:
static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{NULL, NULL, 0, NULL} /* Sentinel */
};
但是我看到一些开发人员这样写哨兵:
static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{} /* Sentinel */
};
我的问题是,使用缩写版本有风险吗?
用{}
初始化的pod类的字段没有显式设置为零。
如果PyMethodDef
是pod(普通旧数据),我怀疑,{NULL, NULL, 0, NULL}
将生成与{}
相同的数据。
在C和c++中都是如此。
如果类PyMethodDef
是c++ 11中的非pod类,那么{NULL, NULL, 0, NULL}
可以做一些与{}
不同的事情,但我强烈怀疑这里的情况。
我唯一关心的是,如果库改变了我,使PyMethodDef
成为一个非pod,并选择使{}
同时不为零数据。我觉得不太可能。
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- c++扩展中的Python哨兵