What is Refcon?
This crate provides the Refcon
enum, which is used to wrap either a
concrete instance of a type T
, or a reference to one.
By implementing AsRef<T>
, Refcon
lets either variant seamlessly
behave as a reference to T
.
const ZERO = costly_initializer;
let v: =
.map
.collect;
// [...]
for x in
When not to use Refcon
T
is smaller than two machine words – you should just copy everything in this case anyways;- you can not afford/do not want to pay for the double indirection price while accessing the inner value;
- you do not want to pay for the price of the additional memory copy while constructing the concrete variant;
When to use Refcon
- You want to mix values & references: e.g. if you have a vector containing either reference to pre-computed values or ad-hoc ones or if an iterator in a trait may iterate over immediate or reference values depending on the implementation.