On Mon, 12 Oct 2009 15:38:07 -0400, bearophile <bearophileh...@lycos.com> wrote:

Steven Schveighoffer:

It looks strange what you are doing.  A Foo can have a memory pool of a
lot of Foo's?  Do you mean to make the memory pool static?

Right and yes.


I think that might work.<

It works if I use a global variable. But I'd like to not used global variables when possible.

A static variable is essentially a scoped global variable. I think it will work if you make it static. I've used plenty of static variables that are instances of the struct they are declared in.



I think the main problem is you are defining MemoryPool!(Foo).Chunk which
specifically needs to know the size of Foo before Foo is completely
declared.
It's like you are doing this:
struct X
{
   X x;
}
Which clearly is incorrect.

But MemoryPool.sizeof is always 8 (on a 32 bit system) because an alias takes no space. So T.sizeof must be 12. I'd like the compiler to understand this.

But you are also declaring the type of the chunk. I don't think it would complain if you were not trying to define a type that required the size of Foo. For example, if you did something like:

struct MemoryPool(T)
{
  T[] chunks;
}

I think it would work, because you aren't trying to define a type which *requires* the size of T before T is fully declared. It's sort of a chicken and egg thing. But since I think you are implementing the memory pool incorrectly (it makes no sense for each instance of an item to have a pool of itself), you should reexamine what you are trying to do.

-Steve

Reply via email to