C++11
предлагает пользовательские литералы. Я только начал играть с ними, что заставило меня задаться вопросом, можно ли автоматически добавить все множители SI в один литерал Я определяю?
Например, если я определяю
Length operator "" _m(long double m) {
return Length(m); // Length in meters
}
где Length
является подклассом некоторого базового класса Units
, я хотел бы иметь механизм автоматического добавления (в том же духе, что и ускорители). Множители SI для всех литералов, которые возвращают a Length
:
// these are added automatically when defining the literal "_m":
// Length in:
Length operator "" _Ym(long double Ym); // Yottameters
Length operator "" _Zm(long double Zm); // Zetameters
... // ...
... // ...
Length operator "" _km(long double km); // kilometers
Length operator "" _mm(long double mm); // millimeters
... // ...
... // ...
Length operator "" _zm(long double zm); // zeptometers
Length operator "" _ym(long double ym); // yoctometers
Насколько я мог видеть, кроме, возможно, некоторой макромагии, нет никакого способа сделать это автоматически, поскольку все пользовательские литералы нуждаются в явном определении.
.. или я что-то пропускаю?