On Sunday, 4 February 2018 at 07:54:12 UTC, infinityplusb wrote:
Hi all

I'm looking to try and write an interface to C++, but given I'm a casual dabbler in D, it's slightly beyond my current ability in terms of both C++ and D!

As a leg up, how would one translate something like this from C++ to D?

`typedef int (CV_CDECL* CvCmpFunc)(const void* a, const void* b, void* userdata );`

From my basic understanding I assumed something like:

`alias CvCmpFunc = Typedef!(int) ; `

but then I'm stuck as to where the rest of the parameters would get passed? Do I just declare it as a function instead? That wasn't my understanding of reading how typedefs worked, however so I'm a little confused.

Any help would be appreciated.


First, you have to understand how CV_CDECL is defined. This is going to determine the calling convention that functions pointed to by CvCmpFunc will have. Assuming it's defined to cdecl, the standard C calling convention (which I'm guess it is) then your D definition needs to be extern(C). If it's stdcall, then you need extern(Windows). If it's empty, then you need extern(C++).

Second, because this is a function pointer you're declaring, you need to use D's function pointer declaration syntax.

Third, we don't need to use the Typedef template for this. alias alone is fine.

So assuming CV_CDECL is cdecl, this should do it:

extern(C) alias CvCmpFunc = int function(const(void)*, const(void)*, void*);

Reply via email to