As part of a larger system (which converts function parameters to a suitable type), I need to solve the following: pass a member function to a "run" template function, access its ParameterTypeTuple, and actually be able to run the function. I've simplified the problem (see below). Is there a way to pass a single argument to "run" ? Both attempts 1 and 2 didn't compile. Attempt 3 compiles but is very bulky (need to pass 2 args).

Also I can't pass &a.fun2 as fun2 is not static.



----
class A{
        void fun2(double x){
                writeln("in fun2 with arg:",x);
        }
}
void run(alias fun,T...)(T args){
        writeln(typeid(ParameterTypeTuple!(fun)));
        fun(args);
}
void run2(alias fun,alias fun2,T...)(T args){
        writeln(typeid(ParameterTypeTuple!(fun)));
        fun2(args);
}
void test(){
        auto a=new A;

        //attempt#1
//run!(a.fun2)(10);//compile error: Error: need 'this' to access member fun2

        //attempt#2
//also tried to just pass x=>a.fun2(x), but then ParameterTypeTuple doesn't work with lambdas.


        //attempt#3
        run2!(a.fun2,x=>a.fun2(x))(10);//works but ugly
}
----

Reply via email to