こんなのを作ってみた。マクロ以外の呼び出せるもの
全部同じオブジェクトで呼び出せるクラス。
これもメタプログラミングなのかな?

Delegate<Child*(int,int,int)> method[]=
{
 &functor,  //Child *operator(int,int,int);を定義しているオブジェクト
 &function, //Child *function(int,int,int); 普通の関数
 Type(),  //new Child(int,int,int);コンストラクター Typeは空のクラス
 Delegate<Child(int,int,int)>(&object,&Class::Method) //オブジェクトと関数のペア
};
Delegate<Parent*(int,int,int)> parent_method=method[0]; //変換可能ならキャストできる
使い道としては関数ポインタの代わりとかイベントの伝達につかってるよ。
for(int i=0;i<n;++i)method[i](a,b,c);