@ziplane

Как ограничить тип T примитивными типами f32 и f64?

если коротко то
impl<T> Compute<T> for Astra 
    where T:f32 +f64
{ 
    fn compute(&self, input: &mut Matrix<T>) -> Matrix<T> {
          // Что то делать 
    }
}

Мне нужно воспользоваться методами f64 и f32, но из за того что тип<T> неизвестен он(компилятор)
ругается что нельзя вызвать метод не зная кто этот <T>
Использовать так (ниже) не могу. Так как структура Astra это маркер и он обязателен.
impl<T> Compute<T> for f64
{ 
    fn compute(&self, input: &mut Matrix<T>) -> Matrix<T> {
          // Что то делать 
    }
}
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347
Crazy on performance...
Ограничить дженерик-тип можно только типажами (traits).
Что Вы хотите сделать? Какие методы f32 и f64 Вам нужны?
Возможно данные методы уже реализованы в типажах стандартной библиотеки - тогда нужно ограничивать их суммой.

Другой вариант, сделать свой типаж, ограничить дженерик тип им, имплементировать этот типаж для f32 и f64
Имплементация должна представлять обертки над нужными действиями

UPD: если нужно ограничение дженерик, на использование метода exp у f32 и f64:
Типаж-контракт на метод exp:
trait Exp {
    fn exp(self) -> Self;
}

impl Exp for f32 {
    fn exp(self) -> Self {
        <f32>::exp(self)
    }
}

impl Exp for f64 {
    fn exp(self) -> Self {
        <f64>::exp(self)
    }
}


так же можно воспользоваться следующим крэйтом:
https://crates.io/crates/num
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы