Translation of C function pointer.

Steven Schveighoffer schveiguy at yahoo.com
Wed Sep 15 14:15:55 PDT 2010


On Wed, 15 Sep 2010 17:15:12 -0400, Steven Schveighoffer  
<schveiguy at yahoo.com> wrote:

> On Wed, 15 Sep 2010 17:05:24 -0400, Yao G. <yao.gomez at spam.gmail.com>  
> wrote:
>
>> Hello gentlemen:
>>
>> I'm trying to translate the newest SQLite C header to D, and I stumbled  
>> unto this gem:
>>> void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
>>
>> What's that? A function pointer that takes another function pointer as  
>> its name? I'm stuck at this and I don't know how to convert it to a D  
>> function pointer. Certainly, the inner pointer is easy:
>>> void (* function(sqlite3_vfs*,void*, const(char) *zSymbol) xDlSym)();
>>
>> But what about the outer one? I am missing something?
>>
>> Thanks in advance.
>
> D supports C-style function pointers.  See here:
>
> typedef char sqlite3_vfs;
>
> // note you can't use void as a parameter type in D
> void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(/*void*/);
> pragma(msg, typeof(xDlSym).stringof);
>
> outputs:
>
> void function() function(sqlite3_vfs*, void*, const const(char*) zSymbol)

BTW, not sure why the const const(char*)...

-Steve


More information about the Digitalmars-d-learn mailing list