小编sch*_*ufi的帖子

如何在c ++接口中处理单位

我目前正在设计一个API,我希望用户能够编写如下代码:

PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);
Run Code Online (Sandbox Code Playgroud)

目前我们使用以下定义执行此操作:

#define mV *1.0e-03
Run Code Online (Sandbox Code Playgroud)

这使得用户编写代码非常方便,并且它也非常易读,但当然也有缺点:

int ms;
Run Code Online (Sandbox Code Playgroud)

会抛出一些难以理解的编译器错误.所以我正在寻找更好的解决方案.

我尝试了新的C++ 11文字,但是我可以实现的是:

long double operator "" _mV(long double value) {
  return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);
Run Code Online (Sandbox Code Playgroud)

最后,API并不关心像Volt或第二个这样的单位,而只关注数字,所以我不想做任何检查,如果你真的输入伏特的强制电压.所以这也应该是可能的:

PowerMeter.forceVoltage(2 ms);
Run Code Online (Sandbox Code Playgroud)

除了坚持定义之外还有什么想法?

c++

21
推荐指数
5
解决办法
4087
查看次数

标签 统计

c++ ×1