你可以用
cfg_aliases
crate,尽管它需要添加构建脚本。
// Cargo.toml
[build-dependencies]
cfg_aliases = "0.1.0"
// build.rs
use cfg_aliases::cfg_aliases;
fn main() {
// Setup cfg aliases
cfg_aliases! {
type_a: { any(feature = "F1", feature = "F2") },
type_b: { any(feature = "F3", feature = "F4") },
type_c: { feature = "F5" },
}
}
#[cfg(type_a)]
fn do_onething_for_type_A(... ) {...}
#[cfg(type_a)]
fn do_another_thing_for_type_A(... ) {
#[cfg(type_b)]
fn do_onething_for_type_B(... ) {
或者,您可以定义宏
like Tokio does
.
macro_rules! cfg_type_a {
($($item:item)*) => {
$(
#[cfg(any(feature = "F1", feature = "F2"))]
$item
)*
}
}
cfg_type_a! {
fn do_onething_for_type_A() {
...
}
}
cfg_type_b! {
fn do_onething_for_type_B() {
...
}
}
请注意,基于宏的方法可能会给使用CLion IDE的库的任何用户带来麻烦。使用该IDE时,您必须启用
设置>语言和;框架>锈蚀>展开声明性宏:使用实验引擎
为上述宏后面定义的东西实现类型补全。