>>429
class CBase{};
class CA : public CBase{};
class CB : public CBase{};

typedef CBase* (*NewFunction)();
template< typename T > struct NewT{ static CBase* New(){ return new T; } };
NewFunction table[]={&NewT<CA>::New,&NewT<CB>::New};


int main(){
CBase *p=table[0]();