|
Boost : |
From: Niels Dekker - mail address until 2008-12-31 (nd_mail_address_valid_until_2008-12-31_at_[hidden])
Date: 2008-07-09 17:41:12
Daryle Walker wrote:
> Arrays are badly-copyable because the C++ committee has never fixed
> them from their half-done status (unlike struct).
FWIW, it's quite easy to write a template function that can copy both
built-in arrays (of any number of dimensions) and Assignable types:
template <typename T>
void copy(const T &source, T &dest)
{
dest = source;
}
template <typename T, std::size_t N>
void copy(const T (&source)[N], T (&dest)[N])
{
for (std::size_t i = 0; i < N; ++i)
copy(source[i], dest[i]);
}
So arrays aren't /that/ uncopyable :-)
> Maybe we should take the lead and make a special case for allowing
> array objects in an boost::any.
I certainly wouldn't mind having array support for boost::any...
Ferdinand Prantl wrote:
> 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?
Is it really so bad to have a cast? What about the following syntax?
boost::any foo( cast_array_to_ptr("foo") );
Having cast_array_to_ptr as follows:
template<typename T, std::size_t N>
T * cast_array_to_ptr(T (&arg)[N])
{
return arg;
}
> 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 wouldn't be completely impossible, though. You can have a function
that returns a char-pointer, implemented by trying to cast a boost::any
to char[N], for N = 1 to some reasonably high maximum constant...
> Storing the array as a full copy with its exact type brings more
> questions like handling multidimensional arrays, avoiding assignments
> when copying the array and how to get the array from the boost::any
> object by boost::any_cast.
I'm pretty sure we can solve those questions on handling
multidimensional arrays, and avoiding assignments, as I mentioned at
Boost Users
http://article.gmane.org/gmane.comp.lib.boost.user/37430
Anyway, just my 2 cents for today,
Kind regards,
-- Niels Dekker http://www.xs4all.nl/~nd/dekkerware Scientific programmer at LKEB, Leiden University Medical Center
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk