Call a function with a function pointer

Artur Skawina art.08.09 at gmail.com
Sun Oct 13 08:17:36 PDT 2013


On 10/13/13 16:43, Benjamin Thaut wrote:
> Am 10.10.2013 17:45, schrieb Namespace:
>> On Thursday, 10 October 2013 at 15:15:45 UTC, bearophile wrote:
>>> Namespace:
>>>
>>>> You mean like this?
>>>> ----
>>>> void foo(T)(extern(C) void function(T*) func) {
>>>>
>>>> }
>>>> ----
>>>>
>>>> That prints: Error: basic type expected, not extern
>>>
>>> In theory that's correct, in practice the compiler refuses that, it's
>>> in Bugzilla, so try to define the type outside the signature (untested):
>>>
>>> alias TF = extern(C) void function(T*);
>>>
>>> void foo(T)(TF func) {}
>>>
>>> Bye,
>>> bearophile
>>
>> /d917/f732.d(8): Error: basic type expected, not extern
>> /d917/f732.d(8): Error: semicolon expected to close alias declaration
>> /d917/f732.d(8): Error: no identifier for declarator void function(T*)
> 
> I found a possible workaround. Its ugly as hell, but at least it works until the bugs are fixed. 

There's no need for such ugly workarounds -- this is just a problem with
the *new* alias syntax. The old one accepts it (unless this changed recently):

    alias extern(C) static void function(int*) Func_t;

artur


More information about the Digitalmars-d-learn mailing list