#reference #container #pointers

refcon

一个可以无差别地封装引用或直接值的引用行为类型

4 个版本

0.2.0 2024 年 6 月 7 日
0.1.2 2024 年 6 月 7 日
0.1.1 2024 年 6 月 7 日
0.1.0 2024 年 6 月 7 日

#60#pointers

每月 36 次下载

CECILL-C

12KB
88

Crates.io文档

什么是 Refcon?

此crate提供Refcon枚举,用于封装类型T的具体实例或其引用。

通过实现AsRef<T>Refcon允许两种变体无缝地表现为一个T的引用。

const ZERO = ABigStruct::costly_initializer();
let v: Vec<ABigStruct> = (0..10_000)
    .map(|i|
         if i < 1_000 {
             Refcon::from(&ZERO)
         } else {
             Refcon::from(ABigStruct::new(i))
         })
    .collect();

// [...]

for x in {
  x.do_something();
}

何时不使用 Refcon

  • T小于两个机器字长 - 在这种情况下,您仍然应该复制所有内容;
  • 您无法承担/不想为访问内部值的双向间接费用付费;
  • 您不想为构建具体变体的额外内存复制付费;

何时使用 Refcon

  • 您想混合值和引用:例如,如果您有一个包含对预计算值或临时值引用的向量的情况,或者如果 trait 中的迭代器根据实现可能迭代直接值或引用值。

无运行时依赖