extern(C) function literals for stubs

Marco Leise Marco.Leise at gmx.de
Wed Jan 22 10:26:25 PST 2014


Am Wed, 22 Jan 2014 17:52:03 +0000
schrieb "bearophile" <bearophileHUGS at lycos.com>:

> Marco Leise:
> 
> > Can I define them somehow? The use case is defining extern C
> > functions that contain code to load the real thing from a
> > library.
> >
> >   nothrow extern(C) void function(int) someFunc = ???
> 
> Perhaps you want:
> 
> extern(C) nothrow void someFunc(int someArg);
> 
> Bye,
> bearophile

Got it now. By declaring the literal stub function in a
template instead I can use the normal function declaration
syntax without introducing a new symbol at the definition site:

{
  ...
  nothrow extern(C) void function(int) someFunc = &Stub!someFunc;
  ...
}

nothrow extern(C) auto Stub(alias func)(ParameterTypeTuple!func args)
{
	debug printf("Loading %s...\n", func.stringof.ptr);
	return (func = &impl)(args);
}


-- 
Marco



More information about the Digitalmars-d-learn mailing list