.rhavin grobert
11/14/2008 5:45:00 PM
On 14 Nov., 12:01, Bart van Ingen Schenau
<Bart.van.Ingen.Sche...@ict.nl> wrote:
> On 13 nov, 16:50, ".rhavin grobert" <cl...@yahoo.de> wrote:
>
> > guess you have a bouquet of paddingless structs (and your compiler
> > already cares for that) that all have one in common: their first
> > memeber has to be their size. As fas as i know (am i right?) a
> > baseclass get's in it's ctor the _baseclass-size_ when doing a sizeof
> > (this), so you cant fill that member in ctor automatically. Lets say
> > you want the derived-class way, e.g.:
>
> <snip>
> > is there a (perhaps templates) way to
> > say:
>
> > "if the struct is derived from 'base', one member of the ctors init-
> > list has to be a 'base(sizeof(this))' " ...?
>
> If the restriction that it only works for dynamically-allocated
> structures is not a problem, you could define a class-specific
> operator new() to collect this information.
> Something like this:
>
> <pseudocode>
> class Base {
> private:
> static std::size_t lastSize;
> public:
> static void* operator new(std::size_t size)
> {
> lastSize = size;
> return ::operator new(size);
> }
> public:
> Base() : mSize(lastSize)
> {
> lastSize = 0; /* reset to avoid undetectable bogus results */
> }
> private:
> unsigned int mSize;};
>
> </pseudocode>
>
> Bart v Ingen Schenau
nice idea, thx, i'll try!