将 Vec<u32> 转换为 Vec<u64>(或 Vec<std::os::raw::c_ulong>)



我试图为windows和linux构建一个c库的包装器,并有windows想要u32的问题,而linux想要u64。目前我的API总是使用u32,因为它很容易升级到u64。然而,对于Vec<32>,我需要通过:

转换它
let unsafe_pages: Vec<bindings::size_t> = pages.iter().map(|&p| p as bindings::size_t).collect();

pagesVec<32>

是否有一种更简单的方法来进行转换而不遍历集合?

No。您需要在堆上分配两倍的空间来容纳新数据,并且需要以两倍的间距将其复制到那里。这需要迭代。当然,理论上可以有一个库函数为你做迭代,但是没有。此外,您的代码已经相当简洁,因此没有太多需要改进的地方。如果您想要更简洁一点,您可以用_替换两次出现的bindings::size_t中的任何一个。