PartialOrd, Clone, Copy, Default, Hash, Debug)]
pub struct LinearDist<T>(T);
Здесь T - числовой тип, может быть и целым и флоатом. В коде гарантируется, что даже если это флоат - там не будет дичи типа infinity или NaN.
Как мне наиболее безболезненно заимплементить Ord и Eq для этой обёртки?
Я делаю так:
// Это для целых
impl<T: Eq> Eq for LinearDist<T> {}
// Это для флоатов
impl Eq for LinearDist<f32> {}
impl Eq for LinearDist<f64> {}
Почему компилятор говорит мне о конфликтующих имплементациях? Ведь по идее f32 не Eq и поэтому первый impl не должен тут мешать. Аналогично, целые числа - это не f32 и f64, поэтому второй и и третий impl'ы также не должны тут мешать. Как исправить?
А вдруг в следующем релизе добавят и твой код перестанет собираться?
Обсуждают сегодня