こういう実装にしたら氏ねという言葉を頂戴しました
Factoryで生成しろってことですかね?

class BaseHoge{
public:
BaseHoge() {};
} ;

class Hoge1: public BaseHoge{
public:
static BaseHoge* create(){ return new Hoge1() ; }
} ;
class Hoge2: public BaseHoge{
public:
static BaseHoge* create(){ return new Hoge2() ; }
} ;
class Hoge3: public BaseHoge{
public:
static BaseHoge* create(){ return new Hoge3() ; }
} ;

BaseHoge* (*create_Hoge[])() = {
Hoge1::create,
Hoge2::create,
Hoge3::create,
} ;