Dzisiaj napisałem ciekawe makra, może komuś się przydadzą.
Przykład użycia:
#include <iostream>
#include <map>
using namespace std;
#define CONCAT_DETAIL(a, b) a##b
#define CONCAT(a, b) CONCAT_DETAIL(a, b)
#define UNIQUENAME CONCAT(__unique_name__, __COUNTER__)
#define CALLINGSTRUCT(cmd,name) \
struct name { static int a; static int call() {{cmd} return 0;} }; int name::a = name::call();
#define CALLOUTSIDE(cmd) \
CALLINGSTRUCT(cmd,UNIQUENAME)
#define MYFUNCTION(nr,nazwa) void nazwa(); CALLOUTSIDE(callbacks[nr]=&nazwa;) void nazwa()
map<int,void(*)()> callbacks;
MYFUNCTION(1,krzysiu)
{
cout << "krzysiu" << endl;
}
MYFUNCTION(2,krwq)
{
cout << "krwq" << endl;
}
MYFUNCTION(0,_4programmers)
{
cout << "4programmers" << endl;
}
int main()
{
for (int i=0; i<3; i++)
callbacks[i]();
return 0;
}
Output:
4programmers
krzysiu
krwq