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