Как объявить двойную переменную const * const * в cython? - PullRequest
1 голос
/ 09 июля 2019

У меня есть функция c ++ в "example.h":

bool myFunc(double const* const* p);

, и я хочу обернуть ее кодом Cython (в файле .pyx).Но когда я пишу следующий код:

cdef extern from r"example.h":
    bool myFunc(double const*const* p)

Я получаю следующую ошибку:

Ошибка компиляции файла Cython: ожидается ')', найдено '*'

и pycharm показывает эту ошибку на двойном const * const * p:

Неразрешенная ссылка' const *

Как мне объявитьчто за переменные?

1 Ответ

0 голосов
/ 09 июля 2019

В C / C ++ продолжается битва за то, чтобы поставить const -квалификатор: либо

void foo(const int *a);

, либо

void foo(int const *a);

, что означает одно и то же.

В Cython такого сражения нет, поскольку он принимает только первую версию.

Приведенное выше правило, примененное к double**, приводит к:

cdef extern from r"example.h":
    bool myFunc(const double * const* p)

Или какВ качестве обходного пути можно полностью исключить квалификатор const:

cdef extern from r"example.h":
    bool myFunc(const double **p)

, который я бы рекомендовал , а не , все выше в больших проектах, где использование const-квалификаторов очень помогает при вычислениичто происходит.

...