On Saturday, 20 July 2013 at 18:57:18 UTC, Jesse Phillips wrote:
On Saturday, 20 July 2013 at 18:27:23 UTC, JS wrote:
is there any way to pass t directly to A?

template A(T...) doesn't seem work nor does using an alias. (or at least, when I try to foreach over it, it doesn't work).

template A(size_t L) {
    enum A = L;
}

template B(T...) {
void B(T b) {
    import std.stdio;
    foreach(Type; T) {
        pragma(msg, Type.stringof);
    }
    foreach(v; b) {
        writeln(v);
    }
}}

void foo(T...)(string s, T t) {
    auto n = A!(t.length);
    B(t);// t is runtime information
         // T is compile time information
}

void main() {
    foo("x", 1, 2);
}

I know I tried that but:

import std.cstream, std.stdio;


template B(T...) {
        string B(T b) {
                string s;
                foreach(Type; T) pragma(msg, Type.stringof);
                foreach(v; b) s ~= v.stringof;
                return s;
        }
}

void foo(T...)(T t)
{
    pragma(msg, B(t));
}

void main() {
    foo("x", "a", "b");
        din.getc();
}


does work. I need to have B generate compile time code so it is efficient. Your method calls an actual function at runtime so it is nearly as fast as it can be.

Reply via email to