Here's a couple of options.
Using void pointers:
Code:
#include <iostream>
using namespace std;
struct MyStruct
{
char name[10];
};
int foo(void *vp)
{
int i = *(int*)vp;
cout <<"in foo, i is " <<i <<endl;
return 1;
}
int bar(void *vp)
{
MyStruct *data = (MyStruct*)vp;
cout <<"in bar, m is " <<data->name <<endl;
return 1;
}
int main()
{
int (*fp)(void *);
MyStruct m = {"Hammer"};
int i = 1;
fp = foo;
fp(&i);
fp = bar;
fp(&m);
return 0;
}
/*
* Output
in foo, i is 1
in bar, m is Hammer
*
*/
Using templates:
Code:
#include <iostream>
using namespace std;
template <typename T>
int foo (T data)
{
cout <<"in foo, data is " <<data <<endl;
return 1;
}
int main(void)
{
foo (11);
foo ("Hammer");
}
/*
* Output
in foo, data is 11
in foo, data is Hammer
*
*/
And here's one more for luck:
Code:
#include <iostream>
#include <cstdarg>
using namespace std;
int LogMessage(char *fmt, ...)
{
va_list arglist;
va_start(arglist, fmt);
vfprintf(stderr, fmt, arglist);
va_end(arglist);
return 1;
}
int main(void)
{
LogMessage ("Message:%d %s ", 11, "Serious error" );
LogMessage ("Hammer");
}