小编San*_*rra的帖子

无法在大小通用类型的函数内使用 mem::size_of 创建常量 (E401)

我有一个 Rust 程序,我一直在尝试使用 const 函数作为宏的替代方法来在编译时生成各种常量(到目前为止效果很好),但我刚刚遇到了一个障碍,下面的代码片段不会编译,因为size_of采用了泛型参数,并且编译器说我不能使用函数签名中的那个:

const fn _IOC<T:Sized>(dir:u32, code:u8, nr:u8) -> u32 {
    // use of generic parameter from outer function (E0401)
    const size: usize = ::core::mem::size_of::<T>();

    (dir  << 30) | ((size as u32) << 16) | ((code as u32) << 8) | ((nr as u32))
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let myioctl = _IOC::<[u8; 65]>(3, b'H', 0x06);
        assert_eq!(myioctl, 0xC0414806);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

error[E0401]: can't use generic parameters from outer function
 --> …
Run Code Online (Sandbox Code Playgroud)

generics constants sizeof rust

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

标签 统计

constants ×1

generics ×1

rust ×1

sizeof ×1