On Tue, 29 Dec 2009 17:44:18 -0500, teo <[email protected]> wrote:

There was a way to define new types within templates and I think that I
have seen that demonstrated here in the newsgroups, but cannot find it
now. Can someone help me please?

I would like to do something like this:

template MyTemplate(T)
{
  struct T ~ "Struct"  // define FooStruct structure
  {
    int x;
  }
  class T ~ "Class"  // define FooClass class
  {
    void bar(T ~ "Struct" t)
    {
      // ...
    }
  }
}

void main()
{
  mixin MyTemplate!("Foo");
  FooStruct t;
  FooClass f = new FooClass();
  f.bar(t);
}

Hopefully I am not mistaken.

Did you try string mixins? Maybe something like this untested code:

template MyTemplate(T)
{
  mixin (CtfeReplace(q{
    struct _T_Struct
    {
      int x;
    }
  }, "_T_", T.stringof));
  mixin (CtfeReplace(q{
    class _T_Class
    {
      void bar(_T_Struct t)
      {
        // ...
      }
    }
  }, "_T_", T.stringof));
}

Sorry if this is a duplicate post. I attempted to cancel my earlier post.

Reply via email to