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

All*_*Lee 1 conditional-compilation rust

我想别名类型uintu32默认,但一个标志可以编辑将其改为期间设置usize.代码应该是这样的:

#[cfg(uint='u32') || default]
type uint = u32;
#[cfg(uint='usize')]
type uint = u64;
Run Code Online (Sandbox Code Playgroud)

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

DK.*_*DK. 5

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

首先,您可以使用功能:

#[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;
Run Code Online (Sandbox Code Playgroud)

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

或者,您可以将设置放在某个配置文件中,然后编写一个构建脚本,将类型别名作为代码发出(请参阅代码生成示例).