Получение связанного выходного типа реализации Add с учетом типов LHS и RHS


В Rust есть ли способ на уровне типов вызвать реализацию Add с помощью типов LHS (Self) и RHS, чтобы использовать ее тип Output (скажем, возвращаемый тип универсальной функции)?

1 5

1 ответ:

Есть, хотя это действительно похоже на черную магию.

Вам нужно объединить 3 бита синтаксиса:

  • реализация признака типа доступна через <Type as Trait>
  • указание RHS просто требует передачи его в качестве параметра Add<???>
  • и, наконец, получение ассоциированного типа признака просто требует использования Trait::OutputType (что может быть неоднозначным)

Комбинируя 3 вместе мы получаем <Self as Add<RhsType>>::Output.