digitalmars.D - quirks of functions and delegates
- Ender KaShae <astrothayne gmail.com> Jul 28 2007
- "Jarrett Billingsley" <kb3ctd2 yahoo.com> Jul 28 2007
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
"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








"Jarrett Billingsley" <kb3ctd2 yahoo.com>