我正在编写一个使用 swift 使用常量 Q 变换的应用程序。在搜索互联网时,我偶然发现了一个 GitHub 代表,它使用 Apple 的加速框架但针对 C++ 实现了常量 q 变换
我已经通读并翻译了大部分代码,但是我被困在一个关于指针的关键部分。
原文显示:
DSPSplitComplex kernel;
kernel.realp = new float[K * m_fftLength];
kernel.imagp = new float[K * m_fftLength];
bzero(kernel.realp, sizeof(float) * K * m_fftLength);
bzero(kernel.imagp, sizeof(float) * K * m_fftLength);
在稍后的函数中,有这个:
DSPSplitComplex complexPointer;
complexPointer.realp = &kernel.realp[(k-1) * m_fftLength];
complexPointer.imagp = &kernel.imagp[(k-1) * m_fftLength];
该函数执行 FFT 并将结果返回给 complexPointer。
我相信这个想法是“内核”是一个矩阵,realp 或 imagp 中的每个条目都是从复杂指针函数返回的完整浮点数组。Xcode 中没有错误。
但是我对如何将这部分转换为 Swift 感到困惑。我做了以下事情:
var real1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var imag1:[Float] = Array(repeating: 0.0, count: Int(K * m_fftLength))
var kernel = DSPSplitComplex(realp: UnsafeMutablePointer(mutating:real1), imagp: UnsafeMutablePointer(mutating:imag1))
和
var complexPointer:DSPSplitComplex
complexPointer.realp = &kernel.realp[Int((k-1) * m_fftLength)]
complexPointer.imagp = &kernel.imagp[Int((k-1) * m_fftLength)]
我得到错误'无关&'。所以它不喜欢指向内核的指针。没有它,错误'无法将'Float'类型的值分配给'UnsafeMutablePointer''
所以我对从这里去哪里感到困惑,因为我不太了解 C++