You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过bindgen配置仅生成#[derive(Clone)]而不生成Copy派生?

bindgen 仅派生 Clone 的配置方案

bindgen 默认会为符合内存布局要求的类型自动派生 Debug、Copy、Clone 三个 trait,你当前配置中显式开启了 .derive_copy(true),进一步强化了 Copy 派生逻辑,因此生成的结构体会同时携带三个派生属性。

按以下步骤修改配置即可实现仅自动派生 Clone:

  1. 移除原有配置中的 .derive_copy(true),替换为 .derive_copy(false) 关闭全局 Copy 自动派生
  2. 添加 .derive_debug(false) 关闭全局 Debug 自动派生
  3. 显式添加 .derive_clone(true) 保留全局 Clone 自动派生

修改后的完整配置代码:

let mut builder = bindgen::Builder::default()
    .clang_arg("-std=c++11")
    .clang_arg("-x")
    .clang_arg("c++")
    .clang_arg("-Wno-pragma-once-outside-header")
    .layout_tests(false)
    .derive_copy(false)
    .derive_debug(false)
    .derive_clone(true)
    .enable_cxx_namespaces()
    .default_enum_style(EnumVariation::Rust {
        non_exhaustive: false,
    });

如果需要对单个类型做定制化派生控制,可以使用粒度更细的配置方法:

  • 禁止特定类型的所有自动派生:.blocklist_derive("需要屏蔽的类型名")
  • 仅允许特定类型额外派生指定trait:.allowlist_derive("需要开放的类型名", "Trait名称")

内容的提问来源于stack exchange,提问作者calvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:54:03