On Thursday, 1 August 2013 at 15:06:50 UTC, Artur Skawina wrote:
On 08/01/13 14:50, John Colvin wrote:
template a(T ...)
{
    void a(R r)
    {
        //want to get a tuple of
        //the members of T, each
        //instantiated with R.

        //do some RT stuff
    }
}

Is this possible?

Whatever I try, I keep running in to "cannot use local as parameter to non-global template" errors, which I understand is to do with context pointers However, this is all compile-time work based entirely on types, there should be no need for any context pointers.


Always post real and complete (even if not working) code, as figuring out
what the problem is can be harder than giving the solution...


   template RealTuple(A...) { alias RealTuple = A; }
   template a(T ...)
   {
       auto a(R)(R r)
       {
           //want to get a tuple of
           //the members of T, each
           //instantiated with R.

           mixin({
              string m;
              foreach (I, _; T)
m ~= "alias UGH"~I.stringof~" = T["~I.stringof~"];\n";
              m ~= "alias TupleofTsBangR = RealTuple!(";
              foreach (I, _; T)
                 m ~= (I?", ":"") ~ "UGH"~I.stringof~"!R";
              return m ~ ");";
           }());

           // do some RT stuff

           TupleofTsBangR x;
           foreach (I, _; typeof(x))
               x[I] = r;

           // etc

           import std.typecons;
           return tuple(x);
       }
   }

(If this is what you were actually looking for then I hope somebody
 else has another solution; this approach is just too ugly...)

artur

sorry yeah I didnt think the question through before asking. I'm normally the one nagging for better example code when people ask questions!

I did consider wading through everything with string mixins etc. but it seemed like a lot of effort for what (on the surface) is a simple problem.

Anyhow, please see my response to monarch_dodra as I've revised my question somewhat

Reply via email to