Rust是如何使用“函数”处理函数的&引用;在args的末尾?

Rust是如何使用“函数”处理函数的&引用;在args的末尾?,rust,Rust,我有以下代码: 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() { } pub类型f\t= ::std::option::option; #[报告员(C)] #[

我有以下代码:

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() {
}
pub类型f\t=
::std::option::option;
#[报告员(C)]
#[衍生(复制、克隆)]
#[导出(调试)]
pub struct Foo{
酒吧f:f_t,
}
fn main(){
}
它不会编译,因为对于参数末尾带有“…”的函数,没有默认的
Clone
实现

  • Rust是如何处理这一行末尾的“…”的,它和C中的“…”做的一样吗

  • Rust不能编译这段代码,但如果我注释
    ,…
    ,它编译得很好。有什么区别,为什么一类函数指针实现
    Clone
    ,而另一类不实现

  • 我应该如何为这些功能实现
    Clone

  • 这意味着它与C中的几乎相同。Rust没有本机变量函数(您无法在Rust中实现一个),但它支持将语法作为绑定到C函数的特例
  • Rust不知道C函数的真正特征是什么。因此,您可以将其声明为任何您想要的,但是如果您弄错了,那么调用该函数可能会在运行时崩溃
  • 这是一个无意的遗漏,这些函数指针应该神奇地成为
    Clone
    。在夜间和测试版上,这已经被修复
  • 这些被称为。