Как проверить, реализована ли черта во время компиляции в 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>();
}