user-defined literals을 두 개 구현하고 싶습니다. 킬로미터 당 _kmh, 초당 미터는 _msh입니다. 내가 할 수없는사용자 정의 리터럴을 사용하여 km/h 및 m/s 구현
void func(MS speed) {}
int main() {
func(10.0_kmh); // this works
func(10.0_ms); // this does not
}
: 나는 그것이 내가 이런 일을 할 수있는 방법으로 그것을 구현하려는
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)};
}
: 이미 두 그것을위한 구조체 및 운영자 ""기능을 가지고 나는 이런 식으로 구현할 수 없기 때문에, 작업에 대한 두 번째 전화를받을 :
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
@ 갈릭 : 글쎄, 그들은 두 가지 모두를 기반으로하지만 구조가 다릅니다. – gartenriese
기본 단위 및 해당 기본 단위로 변환을 수행하는 리터럴 연산자를 사용하는 경우 속도가 한 가지 유형 만 있습니다. – AProgrammer