如何在 Rust 中基于 compile 标志制作类型别名?



我想默认将类型uint别名u32,但是可以在编译过程中设置一个标志以将其更改为usize。代码应该是这样的:

#[cfg(uint='u32') || default]
type uint = u32;
#[cfg(uint='usize')]
type uint = u64;

当我编译时,我可以使用cargo build --uint=usize.我应该怎么做才能完成这项工作?

您想要的功能不存在。 有几种方法可以伪造它。

首先,您可以使用以下功能:

#[cfg(all(feature="uint-is-u16", not(any(feature="uint-is-u32", feature="uint-is-u64"))))]
type uint = u16;
#[cfg(not(any(feature="uint-is-u16", feature="uint-is-u64")))]
type uint = u32;
#[cfg(all(feature="uint-is-u64", not(any(feature="uint-is-u16"))))]
type uint = u64;

这些是使用cargo build --features=uint-is-u64指定的。 请注意,功能是严格累加的,您不能创建"独占"功能:您不能同时指定u64u32。 因此,您需要构建代码,使其即使启用了多个功能也能正常工作。

或者,可以将设置放在配置文件中的某个位置,并编写一个生成脚本,将类型别名作为代码发出(请参阅代码生成示例(。

最新更新