gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:58:11 25 4
gpt4 key购买 nike

我有这个代码:

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 实现。

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

  2. Rust 无法编译此代码,但如果我注释 , ...,它可以正常编译。有什么区别,为什么一类函数指针实现了Clone而另一类没有?

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

最佳答案

  1. 它的含义与它在 C 中的含义大致相同。Rust 没有原生的可变参数函数(您不能在 Rust 本身中实现),但它支持作为绑定(bind)到 C 函数的特殊情况的语法。
  2. Rust 不知道 C 函数的真正签名是什么。因此,您可以将其声明为任何您想要的,但如果您弄错了,那么调用该函数可能会在运行时崩溃。
  3. 这是一个无意的遗漏,这些函数指针应该神奇地被Clone。在 nightly 和 beta 版中,此问题已得到修复。

关于rust - Rust 如何处理 args 末尾带有 "..."的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com