instantiate each of a tuple of templates (Take 2)
Artur Skawina
art.08.09 at gmail.com
Thu Aug 1 08:06:22 PDT 2013
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
More information about the Digitalmars-d-learn
mailing list