有没有办法在多个语句上使用cfg(feature)检查?

Vic*_*voy 13 rust

有没有办法尽量减少以下功能检查?

#[cfg(feature = "eugene")]
pub mod eugene_set_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_balance;
#[cfg(feature = "eugene")]
pub mod eugene_force_map;
#[cfg(feature = "eugene")]
pub mod eugene_rating;
#[cfg(feature = "eugene")]
pub mod eugene_stat;
#[cfg(feature = "eugene")]
pub mod eugene_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_top;
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

#[cfg(feature = "eugene")] {
    pub mod eugene_set_steam_id;
    pub mod eugene_balance;
    pub mod eugene_force_map;
    pub mod eugene_rating;
    pub mod eugene_stat;
    pub mod eugene_steam_id;
    pub mod eugene_top;
}
Run Code Online (Sandbox Code Playgroud)

这样可以更好地传达意义,更符合人体工程学.

She*_*ter 12

CFG-如果箱子提供cfg-if!宏,它应该做你想要什么:

#[macro_use]
extern crate cfg_if;

cfg_if! {
    if #[cfg(feature = "eugene")] {
        pub mod eugene_set_steam_id;
        pub mod eugene_balance;
        pub mod eugene_force_map;
        pub mod eugene_rating;
        pub mod eugene_stat;
        pub mod eugene_steam_id;
        pub mod eugene_top;
    } else {
    }
}
Run Code Online (Sandbox Code Playgroud)

事实上,它甚至用你的话来描述自己:

根据大量#[cfg]参数按人体工程学定义项目的宏.结构类似于if-else链,第一个匹配分支是发出的项.

  • @副总裁。不再需要“else”块 (2认同)

ken*_*ytm 12

您可以创建一个导入所有文件的私有模块,然后让父模块从该私有模块重新导出所有内容:

#[cfg(feature = "eugene")]
#[path = ""]
mod reexport_eugene_modules {
    pub mod eugene_set_steam_id;
    pub mod eugene_balance;
    pub mod eugene_force_map;
    pub mod eugene_rating;
    pub mod eugene_stat;
    pub mod eugene_steam_id;
    pub mod eugene_top;
}

#[cfg(feature = "eugene")]
pub use reexport_eugene_modules::*;
Run Code Online (Sandbox Code Playgroud)

你仍然需要#[cfg]两次写那行.

  • `#[path = ""]` 有什么作用? (3认同)
  • 实际上,我决定使用您的方法,因为它不需要依赖项,并且可以简单地使用语言本身来完成。 (2认同)