是否可以编写一个宏来定义一个包含任意数量(不同)输入类型的枚举?我想做一种类型级别的匹配。
type_switch!(i32 => println!("integer"), f32 => println!("float"), Foo => println!("foo"))
这将扩展为:
{
enum Wrapper {
Variant1(i32),
Variant2(f32),
Variant3(Foo),
}
// impl From<i32>, From<f32>, From<Foo> for Wrapper
|x: Wrapper| match x {
Wrapper::Variant1(x) => println!("integer"),
Wrapper::Variant2(x) => println!("float"),
Wrapper::Variant3(x) => println!("foo"),
}
}
这样我就可以像这样写
let switch = type_switch!(i32 => println!("integer"), f32 => println!("float"), Foo => println!("foo"));
switch(32.into()); // prints "integer"
switch(24.0.into()); // prints "float"