

Local Functions In C++

Submitted by





Haven't you ever wanted to make a function that is logically defined inside the scope of another function? It would look like the following, which is NOT valid C++:



void MyFunction() { void RecursiveFunction( int i) { if (i 0) RecursiveFunction(i-1); }



RecursiveFunction(6); }



If so, you've wanted to make what's called a local function. I remember using and loving them back in my Turbo Pascal days. When I started using C and C++, I missed them often. So I had to separate the functions in this manner, which looks uglier and does not use the logical scoping:



static void RecursiveFunction( int i) { if (i 0) RecursiveFunction(i-1); }



void MyFunction() { RecursiveFunction(6); }



Until, one day, I found a way to emulate them in C++:



void MyFunction() { struct Local { static void RecursiveFunction( int i) { if (i 0) RecursiveFunction(i-1); } };



Local::RecursiveFunction(6); }



Possible uses for this construct are: Recursive sub-operations within a function (shown above). Callback functions that will be passed into enumerators (as in DirectDrawEnumerate()).



Salutaciones,

JCAB





The zip file viewer built into the Developer Toolbox made use of the zlib library, as well as the zlibdll source additions.

