On Thu, Dec 30, 2010 at 9:24 AM, bearophile <bearophileh...@lycos.com>wrote:
> Jonathan M Davis: > > > typedef is definitely on the way out, so that's not a solution, > > typedef is deprecated (because its semantics is not flexible enough and > because it doesn't play well with object oriented language features), but I > have a real need for something like it. Andrei has discussed about a > Phobos-based typedef replacement (based on structs + alias this), but > nothing concrete has come out yet. I hope to see something to solve problems > like spir ones. > > > > and it would be a pretty fragile one IMHO anyway. > > Please, explain better. > > Bye, > bearophile > As far as I know, typedef was a form of "discriminated alias". I don't know the reasons for its deprecation. It just occurred to me that D's typedefs + templates could be quite handy in this case. Consider: struct semantic_wrapper(T) { this(T value) { this.value = value; } T value; } typedef semantic_wrapper!(int) Position; typedef semantic_wrapper!(size_t) Count; typedef semantic_wrapper!(string) Filename; typedef semantic_wrapper!(string) DirPath; void func(Position pos) { ... } void func(Count c) { ... } void func(Filename fname) { ... } void func(DirPath dir) { ... } void main() { func(Position(1)); // calls first overload func(Count(5)); // calls second func(Filename("file.txt")); // third func(DirPath("/dev/null")); // fourth func(1); // fails func("blah"); // fails } Requires a little more typing, but sometimes it can be better than creating a new function name (which can get extra-big, non-telling or both) or than creating factory methods (which I personally dislike, although it's just a matter of taste most of the time; sometimes you may want to instantiate from inside a template and classes needing factories would not work, for example, but one could argue on the validity of this anytime). Just giving my 2 cents. Dunno if I missed some detail. -- Atenciosamente / Sincerely, Guilherme ("n2liquid") Vieira