Translation of C function pointer.

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


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)

so I think it's a function pointer that takes those parameters and returns  
a function pointer that takes no parameters and returns nothing.

-Steve


More information about the Digitalmars-d-learn mailing list