gpt4 book ai didi

macros - 如何在宏中设置编译时条件

转载 作者:行者123 更新时间:2023-11-29 08:02:36 25 4
gpt4 key购买 nike

我想在宏生成函数外的代码时在宏中设置编译时条件。我需要这样的东西:

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 宏状态是否可能?

最佳答案

你要求的是不可能的。值得庆幸的是,您的要求和您的示例建议您是两件不同的事情:

macro_rules! cond {
("i32") => {
struct A {
x: i32,
}
};
($el:expr) => {
struct B {
x: f64
}
};
}

cond!("i32");
cond!("f64");

fn main() {}

然而,从字面上理解你的问题:不,没有办法对宏中的条件进行任何类型的复杂测试,宏也不能设置或测试传递给它们的内容之外的任何类型的状态。您可以对宏的直接输入进行字面匹配,或者您可以将某些输入解析为有限数量的语法结构之一(您无法与之匹配),仅此而已。

关于macros - 如何在宏中设置编译时条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32775077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com