Один из способов избежать проверки (если это действительно то, что вы хотите сделать), это использовать массив - ..
Functor* fp[] = { new Functor0(), new Functor1() };
сейчас - используйте someCondition
в качестве индекса.
a = (*fp[someCondition])();
это просто полагается на полиморфизм времени выполнения, а не на механизм избыточных шаблонов, который вы используете ... (кстати, не забудьте очистить!)
Конечно, это неприятнои откровенно избыточный, издержки if
будут незначительными, но ясность, которую он добавляет к коду, значительна ...