Thread overview
Function templates with more than one declaration?
Apr 14, 2008
Brian Palmer
Apr 14, 2008
boyd
Apr 14, 2008
Bill Baxter
April 14, 2008
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?
April 14, 2008
Would a function template work in this case perhaps?

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

Cheers,
Boyd

-------
On Mon, 14 Apr 2008 19:59:46 +0200, Brian Palmer <d@brian.codekitchen.net> wrote:

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



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
April 14, 2008
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