自定义字面量支持
2025/11/21大约 2 分钟
自定义字面量支持
说明:本文档旨在帮助理解模块功能,具体API和行为请查阅源代码。
概述
Literals.hpp 是 ast 项目中的自定义字面量支持模块,提供了一系列用于单位转换的自定义字面量运算符,使代码中的单位转换更加直观和可读。所有转换均基于 Constants.h 中定义的常量。
功能特性
支持的单位类型
角度单位
- 弧度:
_rad- 直接表示弧度值 - 角度:
_deg- 将角度转换为弧度
长度单位
- 米:
_m- 直接表示米值 - 千米:
_km- 将千米转换为米 - 厘米:
_cm- 将厘米转换为米 - 毫米:
_mm- 将毫米转换为米 - 微米:
_um- 将微米转换为米 - 纳米:
_nm- 将纳米转换为米 - 天文单位:
_au- 将天文单位转换为米
时间单位
- 秒:
_s- 直接表示秒值 - 分钟:
_min- 将分钟转换为秒 - 小时:
_h- 将小时转换为秒 - 天:
_day- 将天转换为秒 - 毫秒:
_ms- 将毫秒转换为秒 - 微秒:
_us- 将微秒转换为秒 - 纳秒:
_ns- 将纳秒转换为秒 - 皮秒:
_ps- 将皮秒转换为秒
速度单位
- 米/秒:
_m_s- 直接表示米/秒值 - 千米/秒:
_km_s- 将千米/秒转换为米/秒 - 千米/小时:
_km_h- 将千米/小时转换为米/秒
角速度单位
- 弧度/秒:
_rad_s- 直接表示弧度/秒值 - 角度/秒:
_deg_s- 将角度/秒转换为弧度/秒
类型支持
所有字面量运算符都提供了两种重载:
- 长双精度浮点型 (
long double) - 无符号长整型 (
unsigned long long)
使用示例
角度单位示例
#include "AstUtil/Literals.hpp"
int main(){
AST_USING_NAMESPACE;
// 角度转换示例
double angle1 = 90.0_deg; // 90度转换为弧度 (约1.5708 rad)
double angle2 = 3.14159_rad; // 直接使用弧度值
double quarter = 0.25 * 360_deg; // 90度
}长度单位示例
#include "AstUtil/Literals.hpp"
int main(){
AST_USING_NAMESPACE;
// 长度转换示例
double distance1 = 5.5_km; // 5.5公里转换为米 (5500米)
double distance2 = 1000_cm; // 1000厘米转换为米 (10米)
double distance3 = 1.0_au; // 1天文单位转换为米
double thickness = 0.5_mm; // 0.5毫米转换为米
}时间单位示例
#include "AstUtil/Literals.hpp"
int main(){
AST_USING_NAMESPACE;
// 时间转换示例
double time1 = 24_h; // 24小时转换为秒 (86400秒)
double time2 = 30_min; // 30分钟转换为秒 (1800秒)
double time3 = 500_ms; // 500毫秒转换为秒 (0.5秒)
double shortDelay = 10_us; // 10微秒转换为秒
}速度单位示例
#include "AstUtil/Literals.hpp"
int main(){
AST_USING_NAMESPACE;
// 速度转换示例
double speed1 = 300000_km_s; // 300000千米/秒转换为米/秒
double speed2 = 100_km_h; // 100千米/小时转换为米/秒 (约27.78 m/s)
double speed3 = 25_m_s; // 直接使用米/秒
}角速度单位示例
#include "AstUtil/Literals.hpp"
int main(){
AST_USING_NAMESPACE;
// 角速度转换示例
double angSpeed1 = 30_deg_s; // 30度/秒转换为弧度/秒
double angSpeed2 = 0.1_rad_s; // 直接使用弧度/秒
}实际计算示例
#include "AstUtil/Literals.hpp"
#include "AstUtil/Constants.h"
int main(){
AST_USING_NAMESPACE;
// 计算示例
double speed = 100_km / 1_h; // 计算速度 (约27.78 m/s)
double frequency = 1.0 / 1_ms; // 计算频率 (1000 Hz)
double circumference = 2.0 * kPI * 1.0_km; // 计算周长
}设计说明
单位制基础
- 角度: 内部计算使用弧度
- 长度: 内部计算使用米
- 时间: 内部计算使用秒
- 速度: 内部计算使用米/秒
- 角速度: 内部计算使用弧度/秒
命名空间
所有字面量运算符都定义在 ast::literals 命名空间中,并且通过 using namespace ast::literals; 导入,便于直接使用。
编译期计算
所有字面量运算符都使用 constexpr 关键字,支持编译期计算,提高性能。
精度考虑
使用 double 类型作为返回值,提供足够的精度进行天文计算。