c++ - C++ 中的编译时类型替换
问题描述
假设我有一个使用内置类型的程序,例如,float
并且我希望能够为我的编译器提供命令行参数以将所有float
声明更改为fixed_point<8,8>
。
假设它们是完全相同的接口(例如,它们在赋值/添加/转换/等方面可以被视为相同),是否有办法通过编译器或构建系统(cmake / scons / 等)进行交换指定特定标志时编译期间的类型?例如,这将为确定性带来一些好处。
解决方案
您可以使用别名类型声明变量,该别名类型是根据预处理器定义有条件地定义的,如下所示:
#ifdef LARGEFLOATS
using MYFLOAT = long double;
#else
using MYFLOAT = double;
#endif
然后,您可以使用-D
编译器标志来设置预处理器定义,例如-DLARGEFLOATS
(对于 MSVC,语法是/D
)。需要注意所有翻译单元都看到相同的预处理器定义。在我的示例中,这可能会导致转换范围缩小。
推荐阅读
- html - Hugo - 未能在资源的“完整性”属性中找到有效的摘要 - 资源已被阻止 - Github 上的主机
- mysql - 从类表继承中确定类型
- angular10 - 类型 '{}' 不可分配给类型 `'any[] | 可迭代
| (可迭代 & 任何[]) | (任何[] & 可迭代 ) | 空 | 未定义'` - vue.js - 将 .bulma-class 添加到 Vue.js 中的所有按钮
- c# - 如何配置 Mutlilayer C# .Net Core 项目以使用 Entity Framework Core?
- python - Flask/SQLAlchemy - 无法在应用程序工厂中删除 Session 对象
- java - 如何使用 RxJava 的方法 retryWhen 多次调用一个方法?
- php - 意外的会话终止
- java - OffsetDateTime 格式化和解析
- vba - 如何在 VBA 中访问共享点文件