gpt4 book ai didi

Python 到 C/C++ const char 问题

转载 作者:太空狗 更新时间:2023-10-29 21:07:51 25 4
gpt4 key购买 nike

我正在用一些 C++ 代码扩展 Python。

我正在使用的其中一个函数具有以下签名:

int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict,
char *format, char **kwlist, ...);

(链接:http://docs.python.org/release/1.5.2p2/ext/parseTupleAndKeywords.html)

感兴趣的参数是kwlist。在上面的链接中,给出了有关如何使用此功能的示例。在示例中,kwlist 如下所示:

  static char *kwlist[] = {"voltage", "state", "action", "type", NULL};

当我使用 g++ 编译它时,我收到警告:

warning: deprecated conversion from string constant to ‘char*’

因此,我可以将 static char* 更改为 static const char*。不幸的是,我无法更改 Python 代码。因此,通过此更改,我得到了一个不同的编译错误(无法将 char** 转换为 const char**)。根据我在这里阅读的内容,我可以打开编译器标志以忽略警告,或者我可以将 kwlist 定义中的每个常量字符串转换为 char *。目前,我正在做后者。还有哪些其他解决方案?

如果之前有人问过这个问题,我很抱歉。我是新来的。

最佳答案

是否 PyArg_ParseTupleAndKeywords()期望修改您传入的数据?通常,在惯用的 C++ 中,一个 const <something> *指向被调用者只会读取的对象,而 <something> *指向被调用者可以写入的对象。

如果PyArg_ParseTupleAndKeywords()期望能够写入 char *你正在通过,除了你在问题中提到的问题之外,你还有一个完全不同的问题。

假设PyArg_ParseTupleAndKeywords不想修改其参数,处理此问题的惯用正确方法是将 kwlist 声明为 const char *kwlist[]并使用 const_cast在调用 PyArg_ParseTupleAndKeywords() 时删除它的常量性这将使它看起来像这样:

PyArg_ParseTupleAndKeywords(..., ..., ..., const_cast<char **>(kwlist), ...);

关于Python 到 C/C++ const char 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com