c++ - 将 STL complex<double> 转换为 fftw_complex 的问题

标签 c++ fftw complex-numbers reinterpret-cast

FFTW 手册 says它的fftw_complex类型与 std::complex<double> 位兼容STL 中的类。但这对我不起作用:

#include <complex>
#include <fftw3.h>
int main()
{
   std::complex<double> x(1,0);
   fftw_complex fx;
   fx = reinterpret_cast<fftw_complex>(x);
}

这给了我一个错误:

error: invalid cast from type ‘std::complex<double>’ to type ‘double [2]’

我做错了什么?

最佳答案

fftw_complex 与 C99 和 C++ 复杂类型的位兼容性背后的想法不是它们可以很容易地相互创建,而是 FFTW 中所有采用指向 fftw_complex 的指针的函数也可以采用指向 c++ std::complex 的指针.因此,最好的方法可能是在整个程序中使用 std::complex<> 并且仅在调用 FFTW 函数时将指针转换为这些值:

std::vector<std::complex<double> > a1, a2;
....
....
fftw_plan_dft(N, reinterpret_cast<fftw_complex*>(&a1[0]),
                 reinterpret_cast<fftw_complex*>(&a2[0]),
                 FFTW_FORWARD, FFTW_ESTIMATE);
....

关于c++ - 将 STL complex<double> 转换为 fftw_complex 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214400/

相关文章:

c++ - 在Mac上编译FLTK程序

c++ - 如何在构造函数中正确初始化wchar_t指针并在析构函数中删除它

c++ - 搜索基于 3D fft 卷积的库

algorithm - 如何表达复数的四聚函数

c - 用于复数乘法的汇编代码/AVX 指令。 (GCC 内联汇编)

c++ - 使用 C++ 套接字时无法接收到多个消息

c++ - 向上移动对象层次结构

c++ - C/C++ 中固定长度实数输入数据的高效二维 FFT

c - 使用 minGW 将 FFTW 链接到 matlab

C 中的复数语法错误(使用 VScode)