From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-01-28 15:47:33
----- Original Message -----
From: "Peter Dimov" <pdimov_at_[hidden]>
> The current alignment solutions don't work in their current form, f.ex.
> aligned_storage<> needs the type beforehand.
> But wouldn't it be possible to implement (using aligned_storage<> as a
> starting point)
> template<class T> (T|void) * placement_allocate(unsigned char *,
> which then could be used by function<>:
> operator= (F f)
> if(void * p = placement_allocate<F>(small_string_buffer, 16))
> new(p) F(f);
> // new F(f)
I need something very much like this for Boost.Python at the moment. What I
actually need looks more like this:
I give the library some arbitrary type T and an object u of POD type
U guaranteed to be sized/aligned so it can store a void*
The library gives me back a pointer to storage in which I can do
a placement-new of T. If possible, this storage is inside of u,
otherwise, it's dynamically allocated.
Another function can be used to free any such data.
I /think/ I need the ability to do placement-new, but it might be OK if the
library wrapped up the possible allocationi and construction. I'd rather
have the low-level facility at my disposal, though. That could help me
control when exceptions get thrown, for example if T had a non-throwing
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk