我有一个结构的两个版本,一个在特性启用时启用,另一个在特性未启用时启用,如下所示。问题是一个包含 unsafe 方法,另一个没有。所以当这些函数在库的其他部分被调用时,我用unsafe { }
块将它们包围起来。当我的库在未启用特性的情况下编译时,我得到以下警告:
不必要的unsafe
块
当此警告不适用时,即当功能未启用时,如何绕过/禁用此警告。
#[cfg(feature = "my-feature")]
pub struct MyStruct {
// some fields
}
#[cfg(not(feature = "my-feature"))]
pub struct MyStruct {
// some different fields
}
#[cfg(feature = "my-feature")]
impl MyStruct {
pub unsafe fn my_func() {}
}
#[cfg(not(feature = "my-feature"))]
impl MyStruct {
pub fn my_func() {}
}
fn main() {
// I want to get rid of this unsafe when its not needed.
unsafe { MyStruct::my_func() };
}
1条答案
按热度按时间cx6n0qe31#
如果这些情况仅在库中,那么您可以不太麻烦地使用宏:
这个宏不允许泛型或复杂表达式作为接收器。扩展它以支持泛型应该相当容易;支持复杂表达式可能需要proc宏。
有一种更好的编写宏的方法:与其在内部要求
unsafe
,并将调用 Package 在cfg
中,不如在内部做一些不安全的事情,这样就总是在外部要求unsafe
。这也解决了泛型和复杂接收器的问题: