你如何推导特征门特征?

问题描述 投票:0回答:1

假设你有一个这样的枚举:

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MyEnum {
    One,
    Two,
    Three,
    Four,
}

但是如果启用了某个功能(我们称之为

PartialEq
),您只想派生,比如说
myenum-partialeq

这在 Rust 中是如何按照惯用方式完成的?

rust traits
1个回答
6
投票

使用

#[cfg_attr()]

#[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "myenum-partialeq", derive(PartialEq)]
pub enum MyEnum {
    One,
    Two,
    Three,
    Four,
}

要记住的一件事是,如果结构不是通用的,则始终将

#[derive(Copy)]
放在同一行或
#[derive(Clone)]
之上。这是因为如果
#[derive(Clone)]
在相同的
#[derive()]
或以下
#[derive(Copy)]
它会扩展为只执行按位复制,而如果它在上面它会为每个字段执行完整的
clone()
,这需要时间甚至可能无法优化。

© www.soinside.com 2019 - 2024. All rights reserved.