'new' class method
KennyTM~
kennytm at gmail.com
Sat Oct 25 07:03:17 PDT 2008
Yigal Chripun wrote:
> KennyTM~ wrote:
>> KennyTM~ wrote:
>>> Bill Baxter wrote:
>>>> On Sat, Oct 25, 2008 at 2:04 AM, KennyTM~ <kennytm at gmail.com> wrote:
>>>>
>>>>>> auto a = Class(); // heap (default)
>>>>>> auto a = Struct(); // stack (default)
>>>>>>
>>>>>> auto a = Class.new(stack)(); // stack
>>>>>> auto a = Struct.new(stack)(); // stack
>>>>>>
>>>>>> auto a = Class.new(heap)(); // heap
>>>>>> auto a = Struct.new(heap)(); // heap
>>>>>>
>>>>>> void *addr;
>>>>>> auto a = Class.new(addr)(); // placement
>>>>>> auto a = Struct.new(addr)(); // placement
>>>>>>
>>>>> I strongly *oppose* using stack and heap as keywords because there
>>>>> are also
>>>>> (partly irrelevant) data structures called stack and heap, even though
>>>>> according to the guideline these class/structs should be named Stack
>>>>> and
>>>>> Heap.
>>>> Right, that's why both Benji and I proposed making them *context*
>>>> keywords. Just like "Windows" is a keyword only in the context of
>>>> extern( ). This would make heap and stack keywords only in the
>>>> context of new( ).
>>>>
>>> I see. But with the your new(...) syntax this can't be done because it
>>> is ambiguous with
>>>
>>> void* stack = allocate();
>>> auto C = Class.new(stack)();
>>>
>>> The placement new syntax should use some other syntax.
>>>
>> or do it like this:
>>
>> auto C = Class.new(placement, addr, etc)();
>> //--------------------^ use this to specify it is a placement new.
>
> maybe just add the concept of allocators.
> auto C1 = Class.new(parameters/*, Allocator = GC.DefaultAllocator */);
> auto C2 = Class.new(parameters, HeapAllocator); // on heap
> auto C3 = Class.new(parameters, StackAllocator); // on stack
> auto C4 = Class.new(parameters, MyPlacementNewAllocator);
> etc..
> initial Allocator hierarchy could be part of the run-time, and could be
> user extended to allow for placement new.
>
This can't work because parameters (I bet you mean constructor arguments
here) can be variadic.
More information about the Digitalmars-d
mailing list