Python к вопросу о символе константы C/C++

Я расширяю Python с помощью некоторого кода C++.

Одна из функций, которые я использую, имеет следующую подпись:

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*’

Так, я могу изменить статический символ* на статическую константу char*. К сожалению, я не могу изменить код Python. Таким образом с этим изменением, я добираюсь, другая ошибка компиляции (не может преобразовать символ ** в символ константы **). На основе того, что я считал здесь, я могу включить флаги компилятора для игнорирования предупреждения, или я могу бросить каждую из постоянных строк в определении kwlist для обугливания *. В настоящее время я делаю последнего. Каковы другие решения?

Извините, если этот вопрос задали прежде. Я являюсь новым.

8
задан Eugene 8 April 2010 в 15:32
поделиться

1 ответ

Ожидает ли PyArg_ParseTupleAndKeywords () изменения передаваемых вами данных? Обычно в идиоматическом C ++ a const * указывает на объект, из которого вызываемый будет только читать, тогда как * указывает на объект, который вызываемый может записать. к.

Если PyArg_ParseTupleAndKeywords () ожидает, что сможет писать в char * , через который вы проходите, у вас совершенно другая проблема, помимо той, которую вы упоминаете в своем вопрос.

Если предположить, что PyArg_ParseTupleAndKeywords не хочет изменять свои параметры, идиоматически верным способом решения этой проблемы было бы объявить kwlist как const char * kwlist [] и использовать const_cast , чтобы удалить его константность при вызове PyArg_ParseTupleAndKeywords () , что заставит его выглядеть так:

PyArg_ParseTupleAndKeywords(..., ..., ..., const_cast<char **>(kwlist), ...);
4
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: