Optimizing delegates

Michel Fortin michel.fortin at michelf.com
Sun Dec 19 13:36:59 PST 2010


On 2010-12-19 15:30:50 -0500, Ary Borenszweig <ary at esperanto.org.ar> said:

> But that is a template:
> 
> int foobar2(int delegate(int x) f)() {
> }
> 
> It's a template that doesn't work because I have to write it in a 
> different way. Sorry, I tried many different template constraints and 
> none of them work.
> 
> I tried these:
> 
> int foobar2(alias f)()
>    if (typeof(f) == typeid(int delegate(int x)))
>    if (is(typeof(f) == int delegate(int)))
>    if (is(typeof(f) == delegate))
> 
> What do I have to write to make it work?

	int foobar2(alias f)()
		if (is(typeof(f(int.init)) == int))

On the plus side, it'll not only work with delegates but also with 
regular functions, template functions, and objects with an opCall 
member.

If you absolutely want to limit it to a delegate, you can try this:

	int foobar2(alias f)()
		if (is(typeof(&f) == int delegate(int)))

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/



More information about the Digitalmars-d mailing list