2

英特尔数学核心函数库在头文件中包含以下代码:

#ifndef MKL_Complex16
typedef
struct _MKL_Complex16 {
    double real;
    double imag;
} MKL_Complex16;
#endif

here所述和here所讨论的,用户可以通过编写来覆盖此结构定义

#define MKL_Complex16 std::complex<double>

在包含头文件之前。有了这一行,MKL_Complex16is #define'd,这意味着字符串只是在std::complex<double>任何地方都被文字字符替换。如果不是,则为typedef'ed,这会为编译器提供更多信息。

这被认为是可接受的做法吗?我想它一定是,因为它是由英特尔实现的。但是我在尝试调试一些代码时发现它非常混乱。

4

1 回答 1

3

这看起来很疯狂。我非常不愿意通过构建环境传递实际代码。如果有的话,请使用更高级别的标志:

#ifndef HAVE_STD_COMPLEX
    struct MKL_Complex16 { double real; double img; };
#else
#  include <complex>
   typedef std::complex<double> MKL_Complex16;
#endif
于 2012-01-12T19:36:34.157 回答