【发布时间】:2017-12-29 20:43:43
【问题描述】:
有没有办法“重新导出”类似于pub use 的#[macro_use] extern crate,以便使用宏的用户不必手动添加这些依赖的extern crates?
问题的其余部分是一个例子来说明。
在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;
【问题讨论】: