On Sun, Dec 18, 2011 at 14:13, Heromyth <bitwo...@qq.com> wrote: > I have a delegate as a parameter in a function which is a template function. > And I want to use alias for the delegate parameter. > Is there a better way for this?
I suppose you do *not*want the commented line? You can extract a template parameter with an is() expression. But the extracted type is only accessible inside a static if. Solution: expose it through an alias: template AsynchronousActionParam(T) { static if (is(T t == void delegate(U), U)) alias U AsynchronousActionParam ; else static assert(false, "Bad AsynchronousActionParam call: " ~ T.stringof); } class TestC { int b = 3; void test(F)(F func ) if (is(AsynchronousActionParam!F)) { static if (is(AsynchronousActionParam!F == string)) func("It's me"); else writeln("test called with void delegate(" ~ AsynchronousActionParam!F ~ ")."); } this(int x) { b = x; } } void main() { auto c = new TestC(3); void foo(string s) { writeln("foo: ", s);} c.test(&foo); }