英特尔数学核心函数库在头文件中包含以下代码:
#ifndef MKL_Complex16
typedef
struct _MKL_Complex16 {
double real;
double imag;
} MKL_Complex16;
#endif
如here所述和here所讨论的,用户可以通过编写来覆盖此结构定义
#define MKL_Complex16 std::complex<double>
在包含头文件之前。有了这一行,MKL_Complex16
is #define
'd,这意味着字符串只是在std::complex<double>
任何地方都被文字字符替换。如果不是,则为typedef
'ed,这会为编译器提供更多信息。
这被认为是可接受的做法吗?我想它一定是,因为它是由英特尔实现的。但是我在尝试调试一些代码时发现它非常混乱。