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