extern(C) function literals for stubs

2014-01-22 Thread 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 = ???

-- 
Marco



Re: extern(C) function literals for stubs

2014-01-22 Thread bearophile

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


Re: extern(C) function literals for stubs

2014-01-22 Thread Marco Leise
Am Wed, 22 Jan 2014 17:52:03 +
schrieb bearophile bearophileh...@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

Thanks, but I want it to be a function pointer so I can swap
it from within the function literal in the fashion of 

  nothrow extern(C) void function(int) someFunc = (int arg) {
  someFunc = GetProcAddress(someFunc);
  someFunc(arg);
  }

-- 
Marco



Re: extern(C) function literals for stubs

2014-01-22 Thread Marco Leise
Am Wed, 22 Jan 2014 17:52:03 +
schrieb bearophile bearophileh...@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