int C function
Ellery Newcomer
ellery-newcomer at utulsa.edu
Fri Sep 30 21:49:44 PDT 2011
On 09/30/2011 08:20 PM, Andrej Mitrovic wrote:
> I think this is a side-effect of the new function pointer fixes, where
> you now can't implicitly convert an extern(C) function to an extern(D)
> function by accident (and that's a good thing). But the problem is,
> you can't define a function with a different linkage type inline as a
> type parameter. You have to use an alias instead:
>
> extern (C) int puts(const char* s);
> alias extern(C) int function(const char*) FunPtr;
<code golf>
template C_function(Ret,Params...){
// Params shall not have modifiers, because C has no modifiers,
// therefore this is good.
alias extern(C) Ret function(Params) C_function;
}
void input_hook(C_function!(int) hook){
ud_set_input_hook(&obj, hook);
}
</code golf>
I presume the extern(C) is transitively applied to e.g.
extern(C):
...
void ud_set_input_hook(ud*, int function(ud*));
More information about the Digitalmars-d-learn
mailing list