Function prototype + definition in the same file

Rainer Schuetze r.sagitario at gmx.de
Wed Sep 26 10:28:27 PDT 2012


On 25.09.2012 13:53, Manu wrote:> So I have this recurring pattern, it's 
really starting to annoy me.
 > It stems from the fact that a function prototype and the definition can
 > not appear in the same file in D (as it can in C/C++)
 > Eg,
 >
[...]
 > I also have numerous more advanced cases of the same problem, and
 > becomes even more unsightly when used in structs to emulate dynamic
 > linkage to static methods of C++ classes.
 >
 > The solution is seemingly trivial; allow function prototypes and
 > definitions to exist in the same file, like in C/C++.
 >

I think this should be allowed, aswell as implementing forward declared 
enums and structs (IIRC the compiler even has some error messages that 
suggest that it is intended).

As a workaround, you could put your prototypes into a struct and 
generate the declarations for the static linking and the stubs for 
dynamic linking from their declarations and run your magic on the 
members of "prototypes":

struct prototypes
{
	void fun1(int a, int b);
	void fun2(int a, int b);
}

mixin(magic([__traits(allMembers, prototypes)])


That way you don't put the symbols into the same scope as the 
prototypes, and you will not add new symbols to the same scope that you 
are iterating over.


More information about the Digitalmars-d mailing list