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