www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Function templates with more than one declaration?

reply Brian Palmer <d brian.codekitchen.net> writes:
I'm building a simple atom (symbol, whatever) library for a project, but I'm
not really satisfied with my syntax for static atom literals. My template:

template atom(string name) {
  static Atom myAtom;
  static this() { myAtom = Atom(name); }
  Atom atom() { return myAtom; } /* Hopefully this will be inlined, haven't
tested that yet... */
}

usage:

Atom name = atom!("name").atom;

The ideal, in my mind, would be to create Atom literals with the same
Atom("name") syntax usable for creating Atoms at runtime. I'm pretty sure that
won't be possible until templates can override functions, though. But I'd at
least like to get rid of that last spurious `.atom` at the end of the
declaration. Has anybody run into this situation before? What's the reason for
only allowing "Implicit Template Properties" when the template declares exactly
one member, anyway?
Apr 14 2008
next sibling parent boyd <gaboonviper gmx.net> writes:
Would a function template work in this case perhaps?

   Atom atom(string name)(){
     static Atom myAtom;
     myAtom =3D Atom(name);
     return myAtom;
   }

Cheers,
Boyd

-------
On Mon, 14 Apr 2008 19:59:46 +0200, Brian Palmer <d brian.codekitchen.ne=
t>  =

wrote:

 I'm building a simple atom (symbol, whatever) library for a project, b=

 I'm not really satisfied with my syntax for static atom literals. My  =

 template:

 template atom(string name) {
   static Atom myAtom;
   static this() { myAtom =3D Atom(name); }
   Atom atom() { return myAtom; } /* Hopefully this will be inlined,  =

 haven't tested that yet... */
 }

 usage:

 Atom name =3D atom!("name").atom;

 The ideal, in my mind, would be to create Atom literals with the same =

 Atom("name") syntax usable for creating Atoms at runtime. I'm pretty  =

 sure that won't be possible until templates can override functions,  =

 though. But I'd at least like to get rid of that last spurious `.atom`=

 at the end of the declaration. Has anybody run into this situation  =

 before? What's the reason for only allowing "Implicit Template  =

 Properties" when the template declares exactly one member, anyway?

-- = Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Apr 14 2008
prev sibling parent Bill Baxter <dnewsgroup billbaxter.com> writes:
Brian Palmer wrote:

 The ideal, in my mind, would be to create Atom literals with the same
 Atom("name") syntax usable for creating Atoms at runtime. I'm pretty
 sure that won't be possible until templates can override functions,
 though. But I'd at least like to get rid of that last spurious
 `.atom` at the end of the declaration. Has anybody run into this
 situation before? What's the reason for only allowing "Implicit
 Template Properties" when the template declares exactly one member,
 anyway?

That's another oldie but a goodie. Been discussed before. At least it should be possible to have some extra private members inside those "Implicit Template Property" templates. But right now there's no way to express "private to the template". --bb
Apr 14 2008