小编Mih*_*hir的帖子

Rust 是否有等效于 C++ 的 decltype() 来获取表达式的类型?

我的代码看起来像:

macro_rules! mask {
    ($bitmap: tt, [..$count: tt], for type = $ty: ty) => {
        {
            let bit_count = std::mem::size_of::<$ty>() * 8;
            let dec_bit_count = bit_count - 1;
            $bitmap & [(1 << ($count & dec_bit_count)) - 1, <$ty>::MAX][((($count & !dec_bit_count)) != 0) as usize]
        }
    };
}

fn main() {
    let bitmap: u8 = 0b_1111_1111;
    let masked_bitmap = mask!(bitmap, [..5], for type = u8);
    println!("{:#010b}", masked_bitmap);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将屏蔽位图。在上面的例子中,0b_1111_1111被屏蔽后[..5]会变成0b_0001_1111.

我希望我的宏是这样的:

macro_rules! mask {
    ($bitmap: tt, …
Run Code Online (Sandbox Code Playgroud)

rust

9
推荐指数
1
解决办法
946
查看次数

有什么方法可以检查预处理器中文件系统是否不区分大小写?

我想在预处理器中检查文件系统是否区分大小写。到目前为止,我一直认为macOS始终具有不区分大小写的路径,但是最近我读到它取决于文件系统。我只需要一种方法来进行此签入#if,因此可以相应地设置数组大小。

c filesystems macos case-insensitive

5
推荐指数
1
解决办法
85
查看次数

“由于需求冲突,无法推断 autoref 的适当生命周期”,但由于特征定义限制,无法更改任何内容

我通过跟踪太多的链接列表来实现链接列表。在尝试实现时iter_mut(),我自己做了并制作了以下代码:

\n
type Link<T> = Option<Box<Node<T>>>;\n\npub struct List<T> {\n    head: Link<T>,\n}\n\nstruct Node<T> {\n    elem: T,\n    next: Link<T>,\n}\n\nimpl<T> List<T> {\n    pub fn iter_mut(&mut self) -> IterMut<T> {\n        IterMut::<T>(&mut self.head)\n    }\n}\n\npub struct IterMut<\'a,  T>(&\'a mut Link<T>);\n\nimpl<\'a, T> Iterator for IterMut<\'a, T> {\n    type Item = &\'a mut T;\n\n    fn next<\'b>(&\'b mut self) -> Option<&\'a mut T> {\n        self.0.as_mut().map(|node| {\n            self.0 = &mut (**node).next;\n            &mut (**node).elem\n        })\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我要避免强制和省略,因为明确可以让我理解更多。

\n

错误:

\n
error[E0495]: cannot infer an appropriate lifetime …
Run Code Online (Sandbox Code Playgroud)

lifetime rust

5
推荐指数
1
解决办法
947
查看次数

atomic_load() 和赋值有什么区别?

我正在开发一个处理大量原子操作的项目。到目前为止,我还不知道\xe2\x80\x99t atomic_load(),并且仅依靠赋值运算符来获取原子类型的值,并且除了这么多测试之外,我还没有\xe2\x80\x99t看到错误。这些原子类型会被多个进程和线程以及 更改atomic_compare_exchange_strong_explicit(),因此它们每次都需要一个旧值,而 \xe2\x80\x99s 我总是这样做,oldValue = <Atomic_ type_variable>并且它总是工作正常。\n这只是偶然吗?我应该更喜欢使用atomic_load()吗?

\n

rvalue lvalue-to-rvalue c11 stdatomic

2
推荐指数
1
解决办法
2648
查看次数

在 Rust 中使用 Box&lt;&gt; 和 HashMap&lt;&gt;

我需要HashMap在 Rust 中创建一个 large ,这就是为什么我想到使用Box来使用堆内存。
我的问题是关于保留这些数据的最佳方式是什么,当然我只想到了两种可能的方式(预计我对 Rust 没有那么丰富的经验)。


fn main() {
  let hashmap = Box<HashMap<u64, DataStruct>>;
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者

fn main() {
  let hashmap = HashMap<u64, Box<DataStruct>>;
  ...
}
Run Code Online (Sandbox Code Playgroud)

处理这种事情的最佳方法是什么?
非常感谢。

hashmap rust

0
推荐指数
1
解决办法
314
查看次数