Re: [LAD] fftw_complex and C++11

From: Fons Adriaensen <fons@email-addr-hidden>
Date: Sun Jan 04 2015 - 16:51:07 EET

On Sun, Jan 04, 2015 at 01:56:51PM +0000, Aurélien Leblond wrote:

> Well all the plugins in ams.lv2 are coded in c++ and are compiled with the
> c++11 standard.
> But when ported the FFT Vocoder, it only compiles when using the c99
> standard.

C and C++ complex types are not compatible for C++, not even if
they have the same binary representation as they will have for
all modern C++ compilers.

You can probably fix some of these errors (at least the first
one) by including <complex.h> (not <complex>) before <fftw3.h>.

This will make fftw use the C native complex type instead of
its own. This will allow float to complex assignment for
example.

If you really want a 'pure' C++ version you will need to
reinterpret_cast whenever you use a function that expects
or returns a C++ complex. It won't make your code any more
readable.

IMHO the C++ complex type (a template class trying to hide
its implementation) is completely useless and a real PITA,
and a good example of the pedantic attitude that is typical
of the C++ crowd.
Nobody with even just a minimal knowledge of scientific
computing would want to hide the implementation of complex
types - almost all classical algorithms (e.g. the FFT)
depend on it being cartesian.

A second source of problems with the vocoder is the mixing
of floats and doubles. There is no good reason to use a
double FFT here.

Ciao,

-- 
FA
A world of exhaustive, reliable metadata would be an utopia.
It's also a pipe-dream, founded on self-delusion, nerd hubris
and hysterically inflated market opportunities. (Cory Doctorow)
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/listinfo/linux-audio-dev
Received on Sun Jan 4 20:15:01 2015

This archive was generated by hypermail 2.1.8 : Sun Jan 04 2015 - 20:15:02 EET