我想在函数外部生成代码时在宏中设置编译时条件。我需要这样的东西:
macro_rules! cond {
( $cond_el:expr ) => {
#[if $cond_el == "i32"]
struct A {
x: i32
}
#[else]
struct A {
x: f64
}
}
}
cond!("i32");
cond!("f64");
fn main() {}
或者类似的东西:
macro_rules! cond {
( $cond_el:expr ) => {
match $cond_el {
"i32" => {
struct A {
x: i32
}
}
_ => {
struct A {
x: f64
}
}
}
}
}
cond!("i32");
cond!("f64");
fn main() {}
是否可以使用当前的Rust宏状态?
答案 0 :(得分:7)
你所要求的是不可能的。值得庆幸的是,您要求的内容以及建议您想要的示例是两回事:
{{1}}
从字面上理解你的问题:不,没有办法在宏中对条件进行任何形式的复杂测试,宏也不能设置或测试传递给它们的任何类型的状态。您可以对宏的直接输入进行文字匹配,或者您可以将某些输入解析为有限数量的语法结构之一(然后您无法匹配),这就是它。