我正在处理一些代码,其中缓冲区由固定大小的数组支持。由于Rust和其提供的构建工具提供了有条件编译的可能性,因此我可以像这样做:
struct Buffer {
// default case, if none is set
#[cfg(not(buffersize))]
buffer: [f32; 16],
#[cfg(buffersize = "32")]
buffer: [f32; 32],
#[cfg(buffersize = "64")]
buffer: [f32; 64],
}
impl Buffer {
fn new() -> Buffer {
Buffer {
#[cfg(not(buffersize))]
buffer: [0.0; 16],
#[cfg(buffersize = "32")]
buffer: [0.0; 32],
#[cfg(buffersize = "64")]
buffer: [0.0; 64],
}
}
}
这里有另一个问题使用特性进行条件编译。仅使用特性,我必须将buffersize和实际值(例如buffersize16)组合在一起。是否可以向Cargo提供cfg标志,或者需要直接向rustc提供它们?
Buffer
只是一个静态大小数组的包装器。我本可以使用类型别名例如type Buffer = [f32; 256]
并对其实现必要的方法。Buffer
最终将在某些并发上下文中使用/将在多个线程中处理。在这里使用正确的生命周期似乎更加麻烦,但我明白你的意思,提供的示例并不是很优雅。 - user8725011