首页 文章

Rust如何在args的末尾处理带有“...”的函数?

提问于
浏览
3

我有这个代码:

pub type f_t =
    ::std::option::Option<extern "C" fn(a: ::std::os::raw::c_int, ...)>;

#[repr(C)]
#[derive(Copy, Clone)]
#[derive(Debug)]
pub struct Foo {
    pub f: f_t,
}

fn main() {
}

它没有编译,因为args末尾的"..."函数没有默认的 Clone 实现 .

  • Rust如何在行尾处理这个“......”,它是否与C中的“...”做同样的事情?

  • Rust无法编译此代码,但如果我发表评论 , ... ,则编译正常 . 有什么区别,为什么一类函数指针实现 Clone 而另一类没有?

  • 如何为这些功能实现 Clone

1 回答

  • 5
    • 这意味着与C中的大致相同.Rust没有本机可变参数函数(您不能在Rust本身中实现它),但它支持语法作为绑定到C函数的特殊情况 .

    • Rust不知道C函数的真正签名是什么 . 所以你可以将它声明为你想要的任何东西,但如果你弄错了,那么调用该函数可能会在运行时崩溃 .

    • 这是一个无意的遗漏,这些函数指针应该是神奇的 Clone . 在夜间和测试版已经修复了 .

相关问题