|
Boost : |
From: Ferdinand Prantl (prantlf_at_[hidden])
Date: 2008-07-09 16:23:00
On Wed, Jul 9, 2008 at 9:57 PM, Mathias Gaunard wrote:
> Ferdinand Prantl wrote:
>> I would like to improve usage of boost::any with text (char*) constants.
>> This would be the goal:
>>
>> boost::any foo("foo");
>
> This is not a char*. There is no problem putting a char* in a boost::any.
> It's a const char[N]. An array.
> To insert an object into a boost::any, the object needs to be copyable.
> Arrays aren't. The end.
I were not arguing the type of the expression. The thing was - is it
possible to modify boost::any in some way to make it usable with C-string
style constants without a cast?
By the way, there is a problem with the proposal made in my previous
e-mail. It would be virtually impossible to get the value from the object
by a cast if the array was stored with its exact type. It is much easier
to store it as a pointer.
The only working option that remains me would be to accept pointers passed
to constructor and to assignment operator as an array either/or:
template<typename ValueType>
any(const ValueType * value)
: content(new holder<const ValueType *>(value))
{
}
template<typename ElementType, std::size_t NumberOfElements>
any(const ElementType (& value)[NumberOfElements])
: content(new holder<const ElementType *>(value))
{
}
Yes, it would mean that boost::any does not accept only copyable objects,
it would enable arays too and it would handle them as a const pointer to
their first element. Would it be bad?
Thanks,
Ferda
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk