c++ - 在同一个应用程序中使用 float 和双重支持编译 kiss fft

标签 c++ visual-studio visual-studio-2013 kissfft

我正在尝试使用 visual studio 2013 让 kiss fft 在同一个应用程序中编译 float 和 double 实现。我看到我需要做的就是将 kiss_fft_scalar 设置为 double 并重新编译以获得 double。

为此,我整理了一个 header ,其中我将带有​​ kiss_fft_scalar 的 header 包含在 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?

最佳答案

有趣的想法,但你可能会更好地破解文件,例如使 kiss_fft_scalar 成为模板参数。一个问题是头文件将包含其他头文件,如 stdlib.h。我想您可以在执行命名空间技巧之前先发制人地包含这些文件。

我猜 struct redef 错误是针对 _kiss_fft_guts.h 中的 kiss_fft_state? 如果您有单独的 Float/Double .cpp 文件并在包含 .c 文件之前使用指令,它可能会起作用。

如果您决定对其进行模板化,您可以查看 Eigen (partial) c++ port of kissfft.

关于c++ - 在同一个应用程序中使用 float 和双重支持编译 kiss fft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42537795/

相关文章:

c# - 第一次执行设置后如何更改编程布局?

带有纯虚函数的C++模板返回值

c++ - visual studio中qt连接sql数据库

c++ - 在 C++ 代码中使用项目属性/宏

c++ - 如何定义自定义文字?

git - Visual Studio 2013 Tools for GIT - 无法发布未发布的分支

c++ - 碰撞检测有效但有小故障?

c# - 为什么我无法在安装 Roslyn SDK 后创建新的分析器/代码修复提供程序项目?

javascript - Apache Cordova 中的 HTML 模板?

c++ - 使用 Visual Studio Express 2013 为 C++ 代码创建独立的可执行文件