29 votes

Existe-t-il un moyen d'utiliser la vérification cfg(feature) sur plusieurs déclarations ?

Existe-t-il un moyen de minimiser le contrôle de la fonctionnalité suivante ?

#[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;

A quelque chose comme :

#[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;
}

Cela permettrait de mieux transmettre le sens et d'être plus ergonomique.

26voto

KennyTM Points 232647

Vous pourriez créer un module privé qui importe tous les fichiers, puis laisser le module parent tout réexporter à partir de ce module privé :

#[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::*;

Vous devez toujours écrire que #[cfg] ligne deux fois cependant.

24voto

Shepmaster Points 1732

El caisse cfg-if fournit le cfg-if! macro qui devrait faire ce que vous voulez :

#[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 {
    }
}

En fait, il se décrit même en utilisant vos mots :

Une macro pour définir de manière ergonomique un élément en fonction d'un grand nombre d'éléments #[cfg] paramètres. Structuré comme une chaîne if-else, la première branche correspondante est l'élément qui est émis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X