Como lidar com unidades na interface c ++

Atualmente estou projetando uma API onde eu quero que o usuário seja capaz de escrever código como este:

PowerMeter.forceVoltage(1 mV);
PowerMeter.settlingTime(1 ms);

Atualmente fazemos isso usando define como:

#define mV *1.0e-03

Isso torna muito conveniente para o usuário escrever seu código e também é muito legível, mas é claro que também tem desvantagens:

int ms;

Vai lançar alguns erros do compilador que são difíceis de entender. Então estou procurando uma solução melhor.

Eu tentei o novo C ++ 11 literais, mas com isso tudo que eu poderia conseguir é:

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

No final, a API não se importa com a unidade, como Volt ou segundo, mas só pega o número, então eu não quero fazer nenhuma verificação se você realmente insere Volts em forceVoltage ou não. Então isso também deve ser possível:

PowerMeter.forceVoltage(2 ms);

Alguma ideia além de ficar com as define?

questionAnswers(9)

yourAnswerToTheQuestion