我目前正在设计一个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++ ×1