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

时间:2016-08-17 21:28:11

标签: 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() {
}

它没有编译,因为没有默认的Clone实现函数&#34; ...&#34;在args的最后。

  1. Rust如何处理这个&#34; ...&#34;在行尾,是否和#34; ...&#34;做同样的事情。在C?

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

  3. 我应该如何为这些功能实施Clone

1 个答案:

答案 0 :(得分:5)

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