|
Boost : |
Subject: Re: [boost] [utility/value_init] boost::value_initialized<T> direct-initialized?
From: Niels Dekker - address until 2010-10-10 (niels_address_until_2010-10-10_at_[hidden])
Date: 2010-03-31 04:27:06
>> Can anybody please have a look at the following feature request by
>> Edward Diener? https://svn.boost.org/trac/boost/ticket/3472 He
>> proposed to add an explicit constructor, value_initialized(T const&),
>> to boost::value_initialized<T>. This constructor would copy the value
>> of its argument to the object held by value_initialized<T>.
>>
>> When such a constructor would be added, an object held by
>> value_initialized<T> might no longer be value-initialized. Instead it
>> might be direct-initialized. Does anybody have any moral (?)
>> objections against the idea that value_initialized<T> might hold a
>> non-value-initialized object?
Jeffrey Hellrung wrote:
> Is defining a new template class (e.g., value_or_direct_initialized<T>,
> or whatever) out of the question? Just a suggestion, and not confident
> it's a good one...
Thanks for the suggestion, Jeffrey! I like it, actually. :-) Maybe we
could simply call the new template class boost::initialized<T>.
I can think of two ways to implement boost::initialized<T> (and adapt
value_initialized<T> accordingly):
The implementation of boost::initialized could be simply copied from the
old value_initialized<T>, but having an extra constructor, initialized(T
const&). The new value_initialized<T> could then be implemented in
terms of boost::initialized<T>:
template<class T>
class value_initialized
{
initialized<T> m_data;
public:
// Forwarding to m_data member functions:
T const & data() const;
T& data();
void swap(value_initialized &);
operator T const &() const;
operator T&();
};
Or boost::initialized<T> could be derived from boost::value_initialized<T>:
template<class T>
class initialized: public value_initialized<T>
{
public:
initialized(T const& arg):
value_initialized(arg) {}
void swap(initialized &);
};
In that case, value_initialized<T> would still need the extra
constructor, value_initialized(T const&), but it could be declared
protected.
What do you think?
Kind regards,
Niels
-- 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