|
Boost : |
From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-02-16 03:44:42
Currently, boost::any supports two kinds of conversion:
1. Unchecked conversion to pointer (NULL is returned if conversion is
impossible)
2. Checked conversion to value type (exception is thrown if conversion is
impossible)
I'd like to have another variant -- checked conversion to reference. The
following code does not compile:
boost::any a = 1;
int& i = boost::any_cast<int&>(a);
There are two issues:
1. Documentation says:
If passed a value or reference, it returns a copy of the value content if
successful.
But even if I change the above to
boost::any a = 1;
int i = boost::any_cast<int&>(a);
it does not compile. Docs are at least inaccurate.
2. Can we make the above work? I attach a patch which implements casting to
reference, and passes all the existing test. I'd like this behaviour because
currently program_options contains code such as:
template<class T>
T&
variable_value::as() {
T* r = boost::any_cast<T>(&v);
if (!r)
throw boost::bad_any_cast();
return *r;
}
which is plain ugly. With the patch, the above can be written as
template<class T>
T&
variable_value::as() {
return boost::any_cast<T&>(v);
}
- Volodya
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk