我的代码看起来像:
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) 我想在预处理器中检查文件系统是否区分大小写。到目前为止,我一直认为macOS始终具有不区分大小写的路径,但是最近我读到它取决于文件系统。我只需要一种方法来进行此签入#if,因此可以相应地设置数组大小。
我通过跟踪太多的链接列表来实现链接列表。在尝试实现时iter_mut(),我自己做了并制作了以下代码:
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}\nRun Code Online (Sandbox Code Playgroud)\n我要避免强制和省略,因为明确可以让我理解更多。
\nerror[E0495]: cannot infer an appropriate lifetime …Run Code Online (Sandbox Code Playgroud) 我正在开发一个处理大量原子操作的项目。到目前为止,我还不知道\xe2\x80\x99t atomic_load(),并且仅依靠赋值运算符来获取原子类型的值,并且除了这么多测试之外,我还没有\xe2\x80\x99t看到错误。这些原子类型会被多个进程和线程以及 更改atomic_compare_exchange_strong_explicit(),因此它们每次都需要一个旧值,而 \xe2\x80\x99s 我总是这样做,oldValue = <Atomic_ type_variable>并且它总是工作正常。\n这只是偶然吗?我应该更喜欢使用atomic_load()吗?
我需要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)
处理这种事情的最佳方法是什么?
非常感谢。