Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-02-18 13:29:39


"Ed Brey" <brey_at_[hidden]> writes:

> Extract is confusing. One problem is that it is deceivingly named.

The name was my suggestion, so I'm going to argue with you a bit about
that.

> It doesn't extract data from the variant at all, but rather provides
> type-specific access to data that still resides in the variant.

"Provides type-specific access to data that still resides in the
variant" is a mouthful, but I'm still not sure what it means. How is
it different from extracting the data?

> It is not clear from the name or the documentation that this would
> be bad:
>
> variant<int>* v = new variant<int>; extract<int> i(*v); delete v;
> return i;

Ugh. Is it clear from the name that this would be bad?

std::back_insert_iterator<std::vector<int> > f()
{
    vector<int> v;
    return back_inserter(v);
}

If the documentation for extract doesn't say that behavior is
undefined if extraction occurs after the constructor argument is
destroyed, it should. Wouldn't that cover your (rather implausible)
case?

> The area would be helped by renaming extract to access.

How is "access" any clearer? "Access" can plausibly be interpreted as
a noun or a verb in the context of variant, so I don't like it very
much.

BTW, I just realized that a conversion from variant<T> to optional<T>
could be used to do extraction as well. Maybe it would be better to
ditch extract altogether and just use optional?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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