Как работать с модулями в интерфейсе c ++

В настоящее время я разрабатываю 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);

Любая идея помимо того, чтобы остаться с определениями?

Ответы на вопрос(9)

Ваш ответ на вопрос