gpt4 book ai didi

macros - 在 macro_rules 中使用另一个宏而不需要使用rust 的 `extern crate`

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

有没有办法“重新导出”#[macro_use] extern crate 类似于 pub use 这样使用宏的宏用户就不必手动添加这些依赖的 extern crate 吗?

问题的其余部分是一个例子来说明。

src/lib.rs 中,注意 id 宏正在使用 lazy_static 宏:

#[macro_export]
macro_rules! id {
() => {
lazy_static! {
static ref NUMBER : std::sync::atomic::AtomicUsize =
std::sync::atomic::AtomicUsize::new(0);
}
return NUMBER.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
}
}

examples/example.rs 中,我们需要为每个宏创建一个 extern crate 行,即使我们只是使用 id直接宏:

#[macro_use]
extern crate id_macro;
#[macro_use]
extern crate lazy_static;

fn new_id() -> usize {
id!();
}

fn main() {
println!("id {}", new_id()); // prints "id 0"
println!("id {}", new_id()); // prints "id 1"
}

在这个例子中,如果 id_macro 的用户可以在不知道 lazy_static 的情况下使用 id! 就好了。有没有一种方法可以“重新导出”extern crate 类似于 pub use 以使以下行远离示例?

#[macro_use]
extern crate lazy_static;

最佳答案

有一个不稳定的macro_reexport属性。

但是,Rust 正在努力使宏 (2.0) 的行为类似于支持 pub use 的普通项目,因此该属性将不稳定并且会过时。

关于macros - 在 macro_rules 中使用另一个宏而不需要使用rust 的 `extern crate`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028231/

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