首页 > 解决方案 > C++ 中的编译时类型替换

问题描述

假设我有一个使用内置类型的程序,例如,float并且我希望能够为我的编译器提供命令行参数以将所有float声明更改为fixed_point<8,8>

假设它们是完全相同的接口(例如,它们在赋值/添加/转换/等方面可以被视为相同),是否有办法通过编译器或构建系统(cmake / scons / 等)进行交换指定特定标志时编译期间的类型?例如,这将为确定性带来一些好处。

标签: c++compilation

解决方案


您可以使用别名类型声明变量,该别名类型是根据预处理器定义有条件地定义的,如下所示:

#ifdef LARGEFLOATS
using MYFLOAT = long double;
#else
using MYFLOAT = double;
#endif

然后,您可以使用-D编译器标志来设置预处理器定义,例如-DLARGEFLOATS(对于 MSVC,语法是/D)。需要注意所有翻译单元都看到相同的预处理器定义。在我的示例中,这可能会导致转换范围缩小。


推荐阅读