我目前正在设计一个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);

除了遵守定义之外,还有其他想法吗?

最佳答案

我更喜欢在任何可能的地方都避免使用宏,这是一个应有可能的示例。
一种可以为您提供正确尺寸的轻型解决方案是:

static double m = 1;
static double cm = 0.1;
static double mV = 0.001;

double distance = 10*m + 10*cm;

这也反射(reflect)了物理概念,即单位乘以值(value)。

关于c++ - 如何在C++接口(interface)中处理单元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11027587/

10-10 00:44