|
Boost : |
From: Tom Widmer (tom_usenet_at_[hidden])
Date: 2004-03-08 05:27:26
On Sun, 7 Mar 2004 15:44:22 -0800, "Robert Ramey" <ramey_at_[hidden]>
wrote:
>>Robert Ramey wrote:
>>> This exchange illustrates the problem rather nicely. Its not clear
>>> to me from the name "aligned_storage" that its meant to do the same
>>> job as "stack_allocate" and in fact is easily confused with other
>>> boost functions. I've been able to find no documentation nor test
>>> nor other information. The only place its used is in variant.hpp but
>>> its not mentioned in the documentation of that either. There is no
>>> statement in the header itself as to what it does and the code is
>>> sufficiently non-trivial that it's not obvious what its supposed to
>>> do. The fact that it has a parameter than stack_allocate doesn't
>>> need also suggests that it's intended purpose is different from that
>>> of stack_allocate.
>
>The previous post referred to alignment_of rather than aligned_storage which
>seems to me to unrelated. Are they related in some non-obvious (to me) way?
aligned_storage can be (and in fact is) implemented in terms of
alignment_of and type_with_alignment. Even if you don't want to use
aligned_storage, since it isn't a full part of boost yet (it didn't
ship with the last release), you could use use type traits to
implement your own correct stack_allocate function. e.g.
template<class T>
struct stack_allocate {
union {
char a[sizeof(T)];
type_with_alignment<alignment_of<T>::value>::type b;
} mem;
T * address(){
void * vptr = &mem;
return static_cast<T *>(vptr);
}
T & reference(){
return * address();
}
};
or something like that.
Tom
-- C++ FAQ: http://www.parashift.com/c++-faq-lite/ C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk