Как проверить, реализована ли черта во время компиляции в Rust?

Я хочу напечатать переменную с Display черта, если это реализовано, или с Debug черта иначе. Все типы известны во время компиляции.

let display = MyDisplayType::new(); // implements Display
let debug = MyDebugType::new(); // implements Debug

output!(display); // uses Display a.k.a. println!("{}", display);
output!(debug); // uses Debug a.k.a. println!("{:?}", debug);

Какой самый чистый способ?

1 ответ

Это возможно, если вы хотите утверждать, что тип во время компиляции реализует трейт. Например, в модульном тесте вы можете создать функцию, ограниченную трейтом. Если тип не реализует трейт, код не будет компилироваться.

      fn implements_the_trait<T: MyTrait>() {}

#[test]
fn implements_my_trait() {
  implements_the_trait::<MyType>();
}
Другие вопросы по тегам