Boost logo

Boost :

Subject: Re: [boost] compact_optional -- prompting interest
From: Nevin Liber (nevin_at_[hidden])
Date: 2015-09-27 18:08:35


On 27 September 2015 at 15:45, Matt Calabrese <rivorus_at_[hidden]> wrote:

> For instance, I have a "card" type that I use for representing one of 52
> possible playing cards. It takes up a byte, even though a byte can hold
> more that 52 different values. If I put a card in an optional as-is, then
> it's occupying extra space for the discriminator. I'd like to use optional
> to represent "not-a-card" because had I baked a "not-a-card" value into the
> original type itself, then any function that takes an actual card would
> need an additional precondition and I'd likely want to assert to make sure
> that the card is valid. With an intrusive_optional abstraction, it makes it
> easy to just use the spare storage in the byte in order to represent
> not-a-card only when it is needed, and it takes up no extra storage than
> what the base abstraction does.
>

So, your card type already has a disengaged state it knows how to deal
with. Why then do you need to wrap your card type inside another template?

And if it doesn't understand the disengaged state, then you have to break a
class invariant (the "byte" being in the range 1..52) to do it, which just
doesn't work.

-- 
 Nevin ":-)" Liber  <mailto:nevin_at_[hidden]>  (847) 691-1404

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk