quirks of functions and delegates

Ender KaShae astrothayne at gmail.com
Wed Aug 1 10:21:57 PDT 2007


Jarrett Billingsley Wrote:

> "Ender KaShae" <astrothayne at gmail.com> wrote in message 
> news:f8ghug$5bg$1 at digitalmars.com...
> 
> > 1.) when I try template t(type: function) I get an error, but there must 
> > be some way to specify that you need the type to be a function
> 
> template Templ(T : U function(V), U, V...)
> {
> 
> }
> 
> void main()
> {
>     mixin Templ!(int); // fails
>     mixin Templ!(void function(int, float)); // OK
> }
> 
> :)

This doesn't quite work, when only a function type is passed I get errors saying that the template was not instatiated correctly and a ton of weird errors about function pointer not implicitly casting to int's, I have no idea what that's about
however when the return and paramater types are explicitly given it runs fine, though it's a little inconvienent to have to supply those twice
> 
> > 2.) in an example in the docs it says that arrays of functions are invalid 
> > types in c++ and d, however i've used arrays of function pointers in c++ 
> > and it seems strange that such a type would be invalid, a function pointer 
> > is after all just a pointer
> 
> There's a slight difference.  A function pointer is valid in both languages, 
> but a function type is illegal.  It's very difficult to get at a function 
> type in D, but possible.  Consider:
> 
> typedef void Foo();
> Foo[] f;
> 
> typedef void function() Bar;
> Bar[] g;
> 
> Notice that the first defines Foo as a function -- not function _pointer_ --  
> type.  Foo[] f; fails.  But the second defines Bar as a function pointer, 
> and Bar[] g is fine. 
> 
> 
so what exactly does Foo mean (without the & operator) and why would anyone want a Foo[] (whatever that means)  it seems to me that Foo is a symbol, not a type.

on that note, if you have a function int func(); and evaluate typeid(typeof(func)) you get the type int() which is odd since func is evaluated the same as func() so the type should just be int




More information about the Digitalmars-d mailing list