Я довольно новичок в Cython (и C ++), и я пытаюсь создать несколько простых инструментов DSP в модульной структуре. Я хочу иметь возможность использовать их для исследовательских целей в Python, и, хотя мне удалось перевести ряд простых классов C ++ в Python, я сейчас борюсь с, казалось бы, тривиальной проблемой.
Я написал класс фильтрации biquad, определенный в biquad.h и biquad.cpp. Идея состоит в том, чтобы иметь несколько классов фильтрации, которые живут в модуле dsp, наряду с рядом других инструментов dsp (аналогично организации модулей в JUCE). Следуя этому подходу, заголовочный файл biquad явно не включается в файл biquad c ++, а скорее связывается через dsp.h, который определяет модуль, то есть в dsp.h у меня есть список включений для всех классов dsp.
например…
#include filters/biquad.h
#include filters/fir.h
#include transforms/hilbert.h
Поэтому, когда я собираюсь построить свой объект python, я пытаюсь скомпилировать мой класс фильтра biquad:
# distutils: sources = biquad.cpp
Если я попытаюсь определить свой внешний файл из файла biquad.h, например:
cdef extern from "biquad.h":
cdef cppclass biquad:
тогда я сталкиваюсь с проблемами, потому что файл заголовка не включен в файл c ++. Но если я определю внешний из основного файла dsp.h, например:
cdef extern from "dsp.h":
cdef cppclass biquad:
он также не может включить файл заголовка. Я бы подумал, что оператор include в dsp.h сделал бы это, но, похоже, это не так, и я понятия не имею, как включить его явно.
Кстати, ошибки, которые я получаю:
error: use of undeclared identifier 'biquad'
Любая помощь будет принята с благодарностью!
Задача ещё не решена.