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

use*_*932 3 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() {
}
Run Code Online (Sandbox Code Playgroud)

它不能编译,因为Cloneargs末尾的函数没有"..."的默认实现.

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

  2. Rust无法编译此代码,但如果我发表评论, ...,它编译得很好.有什么区别,为什么一类函数指针实现Clone而另一类没有呢?

  3. 我应该如何实现Clone这些功能?

dur*_*a42 5

  1. 它意味着与C中的大致相同.Rust没有本机可变参数函数(你不能在Rust本身实现它),但它支持语法作为绑定到C函数的特殊情况.
  2. Rust不知道C函数的真正签名是什么.所以你可以将它声明为你想要的任何东西,但如果你弄错了,那么调用该函数可能会在运行时崩溃.
  3. 这是一个无意识的遗漏,这些函数指针应该是神奇的Clone.在夜间和测试版已经修复了.