我目前正在设计一个 API,我希望用户能够编写如下代码:
PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);
目前我们使用如下定义来做到这一点:
#define mV *1.0e-03
这使得用户编写代码非常方便,而且可读性也很强,但当然也有缺点:
int ms;
会抛出一些难以理解的编译器错误。所以我正在寻找更好的解决方案。
我尝试了新的 C++11 文字,但我能实现的只是:
long double operator "" _mV(long double value) {
return value * 1e-3;
}
PowerMeter.forceVoltage(1_mV);
最后,API 并不关心像伏特或秒这样的单位,而只关心数字,所以我不想做任何检查你是否真的在forceVoltage 中输入了伏特数。所以这也应该是可能的:
PowerMeter.forceVoltage(2 ms);
除了遵守定义之外还有什么想法吗?
通过为不同的电流创建类(ms,mV)来稍微扭转一下怎么样?
e.g.
PowerMeter.forceVoltage( mV(1) );
PowerMeter.settlingTime( ms(1) )
它对用户来说非常清楚,并且可以说不难阅读,而且您还可以免费进行类型检查。不同单元有一个共同的基类将使其更容易实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)