【问题标题】:Switching data types based on system?基于系统切换数据类型?
【发布时间】:2016-02-15 03:05:13
【问题描述】:

我有一个项目需要从磁盘读取一些字节。如果系统是 64 位系统,这将读取一个双字以获取正确的字节数。如果是 32 位系统,它将读取一个单词。

我希望有一种类型可以代表这些选项中的任何一个。叫它SystemWord

我不确定以某种方式处理这个问题的最佳方法,让我拥有类似的东西

let test: SystemWord = 0x01;

它会立即知道是选择u64还是u32。

任何人都可以提供有关最佳方式的任何指导吗?我对 Rust 还是很陌生。

【问题讨论】:

    标签: types architecture rust 32bit-64bit


    【解决方案1】:

    你的意思是usize,就像explained in the Rust Book

    这就是您看起来实际上想要的解决方案。您询问的解决方案是conditional compilation,如下所示:

    #[cfg(target_pointer_width="32")]
    type SystemWord = u32;
    
    #[cfg(target_pointer_width="64")]
    type SystemWord = u64;
    

    但是,当您可以使用 usize 时,请不要这样做。事实上,除非您绝对必须这样做,否则不要这样做,因为这通常会导致您的代码中有两个或多个代码路径:一个经过良好测试,另一个通常没有完全测试过

    【讨论】:

    • 哇不错!使用,那很有趣。谢谢!如果我只是将它设置为使用,我可以让 Rust 处理它。
    猜你喜欢
    • 2019-05-04
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多