Я пытаюсь заставить kiss fft скомпилировать реализации float и double в одном и том же приложении, используя Visual Studio 2013. Я вижу, что все, что мне нужно сделать, — это установить kiss_fft_scalar на double и пересобрать, чтобы получить double.
Для этого я собрал заголовок, в котором я включил заголовки с измененным kiss_fft_scalar в 2 разных пространствах имен следующим образом:
namespace KissFloat
{
#undef KISS_FFT_H
#undef KISS_FTR_H
#define kiss_fft_scalar float
#include "kiss_fft.h"#include "tools/kiss_fftr.h"};
namespace KissDouble
{
#undef KISS_FFT_H
#undef KISS_FTR_H
#define kiss_fft_scalar double
#include "kiss_fft.h"#include "tools/kiss_fftr.h"};
Однако я не могу понять, как включить код cpp. Я пробовал отдельные файлы KissFloat и KissDouble. Затем я попробовал несколько вещей в файле cpp, но все, что я пробовал, заканчивалось ошибками компиляции. обычно относящиеся к переопределению структуры.
Кто-нибудь может придумать, как сделать эту работу? Или мне просто лучше переписать поцелуй, используя шаблоны?
Интересная идея, но вам может повезти, просто взломав файлы, например изготовление kiss_fft_scalar
параметр шаблона. Одна проблема заключается в том, что заголовочные файлы будут включать в себя другие заголовочные файлы, такие как stdlib.h
, Я полагаю, вы могли бы превентивно включить эти файлы, прежде чем делать трюк с пространством имен.
Я предполагаю, что ошибки переопределения структуры для kiss_fft_state
в _kiss_fft_guts.h
?
Это может работать, если у вас есть отдельные файлы Float / Double .cpp и с помощью директивы перед включением .c файлов.
Если вы решите шаблонизировать его, вы можете взглянуть на Собственный (частичный) c ++ порт kissfft.
Итак, я обнаружил, что Эйген выполнил работу по шаблонному поцелую FFT для меня. Yay для других людей, делающих тяжелую работу! 😉
Эйген доступен здесь:
https://bitbucket.org/eigen/eigen/src
и реализация поцелуй FFT находится под
«Неподдерживаемый / Эйген / SRC / FFT /»