Я хочу реализовать два user-defined literals, _kmh для километров в час и _ms для метров в секунду. У меня уже есть два для этого структур и оператор «» функции:Реализация км/ч и м/с с пользовательскими литералами
constexpr KMH operator "" _ms(long double val) {
return KMH {static_cast<double>(val * 3.6)};
}
constexpr MS operator "" _kmh(long double val) {
return MS {static_cast<double>(val/3.6)};
}
Я хочу, чтобы реализовать это таким образом, что я могу мог бы сделать что-то вроде этого:
void func(MS speed) {}
int main() {
func(10.0_kmh); // this works
func(10.0_ms); // this does not
}
я не могу получить второй вызов на работу, потому что я не могу реализовать это следующим образом:
constexpr KMH operator "" _kmh(long double val) {
return KMH {static_cast<double>(val)};
}
Это, очевидно, дает мне ошибку
error: functions that differ only in their return type cannot be overloaded
Есть ли способ реализовать то, что я хочу?
Я думаю, что KMH и MS должны быть разных типов (а не только typedeff'd). – Galik
@Galik: Ну, они оба основаны на двойном, но являются отдельными структурами. – gartenriese
У меня будет только один тип для скорости с базовым блоком и буквальными операторами, делающими преобразование в этот базовый блок. – AProgrammer