template+alias as an object's "namespace"

F i L witte2008 at gmail.com
Tue Apr 17 15:53:06 PDT 2012


Would it be prudent to make Templates be able to be used without 
parameters? (Or something along those lines) Consider the 
following:

   struct Foo1 {
     string name = "Foo1";

     alias Unsafe!() unsafe;
     	
     template Unsafe() {
       string name = "Bar";

       void bar() {
         writeln(this.name, name);
       }
     }
   }

   struct Foo2 {
     string name = "Foo2";
     string unsafe_name = "Bar";

     void unsafe_bar() {
       writeln(name, unsafe_name);
     }
   }

   void main() {
     auto foo1 = Foo1();
     auto foo2 = Foo2();

     foo1.Unsafe!().bar(); // ugly
     foo1.unsafe.bar(); // nice
     foo2.unsafe_bar(); // classic
   }

The classic way works, or course, but it's not as pretty :)
I may be breaking some sacred rule of OOP here, but I think this 
kind of classification comes in handy. In fact, I think D's the 
only language that actually allows for this syntax without 
increasing an objects memory footprints.

It could be *useful* in situations where you want to 
simplistically wrap a complex system, say X11, and provide _a 
few_ convenience functions, while still providing complete access 
to X11 objects, but grouping them into logical subsection. 
Example:

   class Window {
     private XDisplay* _display;

     void create(...) { /* use _display; */ }
     void delete(...) { /* ditto */ }

     template X11 {
       @property auto display() { return _display; }
     }
   }

The only thing that erks me is the name "template" doesn't really 
match it's function at this point. Maybe something like "alias 
template" would make more sense:

   alias template X11 { ... }

idk. What are peoples thoughts on this? Good? Bad? Ugly?


More information about the Digitalmars-d mailing list