🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
/github/workspace/src/AstUtil/Util/Literals.hpp

以下是如何使用这些自定义字面量的示例:

// 角度转换示例
double angle1 = 90.0_deg; // 90度转换为弧度
double angle2 = 3.14159_rad; // 弧度值
// 长度转换示例
double distance1 = 5.5_km; // 5.5公里转换为米
double distance2 = 1000_cm; // 1000厘米转换为米
double distance3 = 1.0_au; // 1天文单位转换为米
// 时间转换示例
double time1 = 24_h; // 24小时转换为秒
double time2 = 30_min; // 30分钟转换为秒
double time3 = 500_ms; // 500毫秒转换为秒
// 速度转换示例
double speed1 = 300000_km_s; // 300000千米/秒转换为米/秒
double speed2 = 100_km_h; // 100千米/小时转换为米/秒
// 角速度转换示例
double angSpeed1 = 30_deg_s; // 30度/秒转换为弧度/秒
double angSpeed2 = 0.1_rad_s; // 0.1弧度/秒
// 在计算中的使用
double speed = 100_km / 1_h; // 计算速度(米/秒)
double frequency = 1.0 / 1_ms; // 计算频率(Hz)
#pragma once
#include "Constants.h"
AST_NAMESPACE_BEGIN
namespace literals
{
// 角度单位 - 基于弧度的单位制. 所有角度转换最终表示为弧度
inline constexpr double operator ""_rad(long double val)
{
return val;
}
inline constexpr double operator ""_rad(unsigned long long val)
{
return static_cast<double>(val);
}
inline constexpr double operator ""_deg(long double val)
{
return val * kDegToRad;
}
inline constexpr double operator ""_deg(unsigned long long val)
{
return val * kDegToRad;
}
inline constexpr double operator ""_arcsec(long double val)
{
return val * kArcSecToRad;
}
inline constexpr double operator ""_arcsec(unsigned long long val)
{
return val * kArcSecToRad;
}
inline constexpr double operator ""_revs(long double val)
{
return val * kRevolutionToRad;
}
inline constexpr double operator ""_revs(unsigned long long val)
{
return val * kRevolutionToRad;
}
// 长度单位 - 基于米的单位制. 所有长度转换最终表示为米
inline constexpr double operator ""_km(long double val)
{
return val * kKilometerToMeter;
}
inline constexpr double operator ""_km(unsigned long long val)
{
return val * kKilometerToMeter;
}
inline constexpr double operator ""_m(long double val)
{
return val;
}
inline constexpr double operator ""_m(unsigned long long val)
{
return static_cast<double>(val);
}
inline constexpr double operator ""_cm(long double val)
{
return val * kCentimeterToMeter;
}
inline constexpr double operator ""_cm(unsigned long long val)
{
return val * kCentimeterToMeter;
}
inline constexpr double operator ""_mm(long double val)
{
return val * kMillimeterToMeter;
}
inline constexpr double operator ""_mm(unsigned long long val)
{
return val * kMillimeterToMeter;
}
inline constexpr double operator ""_um(long double val)
{
return val * kMicroMeterToMeter;
}
inline constexpr double operator ""_um(unsigned long long val)
{
return val * kMicroMeterToMeter;
}
inline constexpr double operator ""_nm(long double val)
{
return val * kNanometerToMeter;
}
inline constexpr double operator ""_nm(unsigned long long val)
{
return val * kNanometerToMeter;
}
inline constexpr double operator ""_au(long double val)
{
return val * kAU;
}
inline constexpr double operator ""_au(unsigned long long val)
{
return val * kAU;
}
// 时间单位 - 基于秒的单位制. 所有时间转换最终表示为秒
inline constexpr double operator ""_s(long double val)
{
return val;
}
inline constexpr double operator ""_s(unsigned long long val)
{
return static_cast<double>(val);
}
inline constexpr double operator ""_min(long double val)
{
return val * kMinToSec;
}
inline constexpr double operator ""_min(unsigned long long val)
{
return val * kMinToSec;
}
inline constexpr double operator ""_h(long double val)
{
return val * kHourToSec;
}
inline constexpr double operator ""_h(unsigned long long val)
{
return val * kHourToSec;
}
inline constexpr double operator ""_day(long double val)
{
return val * kDayToSec;
}
inline constexpr double operator ""_day(unsigned long long val)
{
return val * kDayToSec;
}
inline constexpr double operator ""_ms(long double val)
{
return val * kMilliSecToSec;
}
inline constexpr double operator ""_ms(unsigned long long val)
{
return val * kMilliSecToSec;
}
inline constexpr double operator ""_us(long double val)
{
return val * kMicroSecToSec;
}
inline constexpr double operator ""_us(unsigned long long val)
{
return val * kMicroSecToSec;
}
inline constexpr double operator ""_ns(long double val)
{
return val * kNanoSecToSec;
}
inline constexpr double operator ""_ns(unsigned long long val)
{
return val * kNanoSecToSec;
}
inline constexpr double operator ""_ps(long double val)
{
return val * kPicoSecToSec;
}
inline constexpr double operator ""_ps(unsigned long long val)
{
return val * kPicoSecToSec;
}
// 速度单位 - 基于m/s的单位制
inline constexpr double operator ""_m_s(long double val)
{
return val;
}
inline constexpr double operator ""_m_s(unsigned long long val)
{
return static_cast<double>(val);
}
inline constexpr double operator ""_km_s(long double val)
{
return val * kKilometerToMeter;
}
inline constexpr double operator ""_km_s(unsigned long long val)
{
return val * kKilometerToMeter;
}
inline constexpr double operator ""_km_h(long double val)
{
return val * kKilometerToMeter / kHourToSec;
}
inline constexpr double operator ""_km_h(unsigned long long val)
{
return val * kKilometerToMeter / kHourToSec;
}
// 角速度单位 - 基于 rad/s的单位制
inline constexpr double operator ""_rad_s(long double val)
{
return val;
}
inline constexpr double operator ""_rad_s(unsigned long long val)
{
return static_cast<double>(val);
}
inline constexpr double operator ""_deg_s(long double val)
{
return val * kDegToRad;
}
inline constexpr double operator ""_deg_s(unsigned long long val)
{
return val * kDegToRad;
}
//----------------
// unit literals
//----------------
constexpr double deg = 1_deg;
constexpr double rad = 1_rad;
constexpr double arcsec = 1_arcsec;
constexpr double m = 1_m;
constexpr double km = 1_km;
constexpr double cm = 1_cm;
constexpr double au = 1_au;
constexpr double s = 1_s;
constexpr double sec = 1_s;
constexpr double ms = 1_ms;
constexpr double min = 1_min;
constexpr double h = 1_h;
constexpr double day = 1_day;
}
// 导入字面量命名空间到ast命名空间,便于使用
using namespace literals;
AST_NAMESPACE_END