quirks of functions and delegates
Jarrett Billingsley
kb3ctd2 at yahoo.com
Wed Aug 1 10:37:13 PDT 2007
"Ender KaShae" <astrothayne at gmail.com> wrote in message
news:f8qffl$er3$1 at digitalmars.com...
>
> 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
I'm going to have to see some of your code. This works fine for me:
template Templ(T : U function(V), U, V...)
{
const Templ = T.stringof;
}
void main()
{
pragma(msg, Templ!(int function(float)));
pragma(msg, Templ!(void function(char[], int[char[]])));
}
> 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.
Foo is a type. You can make pointers by adding an asterisk to it like any
other type: Foo*. It's not a very useful type, it's just there for
completeness.
> 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
Again, I'm going to have to see code. function int func() is an incomplete
function literal. It means nothing and does not compile. However if you
write "int function() func;" and then get the typeid(typeof(func)), it's
"int()*" (that is a pointer to a function which takes nothing and returns an
int), which makes sense because the "call a function without parens" does
not apply to function _pointers_, only _functions_ (there's a use for that
function type!).
More information about the Digitalmars-d
mailing list