D Beginner Trying Manual Memory Management

aldanor via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jan 14 08:10:49 PST 2015


On Wednesday, 14 January 2015 at 14:54:09 UTC, Laeeth Isharc 
wrote:
>
>
>> In the hierarchy example above (c++ hdf hierarchy link), by 
>> using UFCS to implement the shared methods (which are achieved 
>> by multiple inheritance in the c++ counterpart) did you mean 
>> something like this?
>>
>> // id.d
>> struct ID { int id; ... }
>>
>> // location.d
>> struct Location { ID _id; alias _id this; ... }
>>
>> // file.d
>> public import commonfg; // ugh
>> struct File { Location _location; alias _location this; ... }
>>
>> // group.d
>> public import commonfg;
>> struct File { Location _location; alias _location this; ... }
>>
>> // commonfg.d { ... }
>> enum isContainer(T) = is(T: File) || is(T : Group);
>> auto method1(T)(T obj, args) if (isContainer!T) { ... }
>> auto method2(T)(T obj, args) if (isContainer!T) { ... }
>>
>> I guess two of my gripes with UFCS is (a) you really have to
>
>>
>> // another hdf-specific thing here but a good example in 
>> general is that some functions return you an id for an object 
>> which is one of the location subtypes (e.g. it could be a File 
>> or could be a Group depending on run-time conditions), so it 
>> kind of feels natural to use polymorphism and classes for 
>> that, but what would you do with the struct approach? The only 
>> thing that comes to mind is Variant, but it's quite meh to use 
>> in practice.
>
> Void unlink(File f){}
> Void unlink(Group g){}
>
> For simple cases maybe one can keep it simple, and despite the 
> Byzantine interface what one is trying to do when using HDF5 is 
> not intrinsically so complex.
So your solution is copying and pasting the code?

But now repeat that for 200 other functions and a dozen more 
types that can be polymorphic in weirdest ways possible...


More information about the Digitalmars-d-learn mailing list