www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - quirks of functions and delegates

reply Ender KaShae <astrothayne gmail.com> writes:
I have two questions concerning functions and delegates (as they are so similar
I will refer to them simply as functions from now on)  1.) can you specify a
template argument to be a function and 2.) can you have arrays of functions

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

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
Jul 28 2007
parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Ender KaShae" <astrothayne gmail.com> wrote in message 
news:f8ghug$5bg$1 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 } :)
 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.
Jul 28 2007