D Beginner Trying Manual Memory Management

Laeeth Isharc via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jan 14 06:54:08 PST 2015



> 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.



More information about the Digitalmars-d-learn mailing list