我想实现两个 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
有没有办法实现我想要的?
最佳答案
您可以添加非显式operator MS()
class KMH
{
public:
operator MS() const { return {val / 3.6}; }
// your previous stuff
};
或 MS
中采用 KMH
构造函数
class MS
{
public:
constexpr MS(const KMH& kmh) : val(kmh.val * 3.6) {}
// your previous stuff
};
顺便说一句,你可能只坚持一个结构(MS
)并让你所有的operator ""_ms
, ""_kmh
return MS
关于c++ - 使用用户定义的文字实现 km/h 和 m/s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26267364/