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

时间:2018-06-22 05:20:16

标签: rust conditional-compilation

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

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

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

1 个答案:

答案 0 :(得分: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;

这些是使用cargo build --features=uint-is-u64指定的。请注意,功能是严格的加法,并且您不能设置“独占”功能: ie 您无法同时指定两个{{ 1}}和u64。因此,即使启用了多个功能,您也需要对代码进行结构设计,使其能够正常工作。

或者,您可以将设置放在配置文件中的某个位置,然后编写一个build script,它发出类型别名作为代码(请参见code generation example)。