Компилирование поцелуя FFT с поплавком и двойной поддержкой в ​​одном приложении

Я пытаюсь заставить 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, но все, что я пробовал, заканчивалось ошибками компиляции. обычно относящиеся к переопределению структуры.

Кто-нибудь может придумать, как сделать эту работу? Или мне просто лучше переписать поцелуй, используя шаблоны?

0

Решение

Интересная идея, но вам может повезти, просто взломав файлы, например изготовление kiss_fft_scalar параметр шаблона. Одна проблема заключается в том, что заголовочные файлы будут включать в себя другие заголовочные файлы, такие как stdlib.h, Я полагаю, вы могли бы превентивно включить эти файлы, прежде чем делать трюк с пространством имен.

Я предполагаю, что ошибки переопределения структуры для kiss_fft_state в _kiss_fft_guts.h?
Это может работать, если у вас есть отдельные файлы Float / Double .cpp и с помощью директивы перед включением .c файлов.

Если вы решите шаблонизировать его, вы можете взглянуть на Собственный (частичный) c ++ порт kissfft.

1

Другие решения

Итак, я обнаружил, что Эйген выполнил работу по шаблонному поцелую FFT для меня. Yay для других людей, делающих тяжелую работу! 😉

Эйген доступен здесь:

https://bitbucket.org/eigen/eigen/src

и реализация поцелуй FFT находится под

«Неподдерживаемый / Эйген / SRC / FFT /»

0

По вопросам рекламы [email protected]