如何根据 Rust 中的编译标志制作类型别名?

How to make type aliases based on compile flags in Rust?

我想默认将类型 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 指定的。请注意,特征是 严格地 加性的,而你 不能 制作 "exclusive" 特征: 你无法同时指定 u64u32。因此,您需要构建代码,使其即使在启用多个功能的情况下也能正常工作。

或者,您可以将设置放在某个配置文件中,然后写一个 build script that emits the type alias as code (see the code generation example).