C++11
user-defined literals. Я только начал играть с ними, что заставило меня задаться вопросом, можно ли автоматически добавить все SI multipliers в один литерал, который я определяю?Как автоматически добавлять литеральные определения, основанные на одном определяемом пользователем литерале?
Например, если я определяю
Length operator "" _m(long double m) {
return Length(m); // Length in meters
}
где Length
является подкласс некоторого Units
базового класса, я хотел бы иметь механизм для автоматически оных (в том же духе, как boost operators) SI мультипликаторы для всех литералов, возвращающих 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
насколько я мог видеть, кроме, возможно, некоторые макро магии, нет никакого способа сделать это поскольку все пользовательские литералы нуждаются в определении явно.
.. или я что-то пропускаю?
Почему не с шаблонами? –
@Adriano: пример? –
То же, что и: http://www.codeproject.com/Articles/447922/Application-of-Cplusplus11-User-Defined-Literals-t (если вы можете опустить единицу измерения и сохранить множитель только ... I пропустил этот момент, вы правы, нам может понадобиться _macro magic_) –