Implementação anti-if do método de fábrica

Estou aplicando o padrão de design Factory no meu projeto C ++, e abaixo você pode ver como estou fazendo isso. Eu tento melhorar meu código seguindo a campanha "anti-if", assim, desejo remover as instruções if que estou tendo. Alguma idéia de como posso fazer isso?

typedef std::map<std::string, Chip*> ChipList;

Chip* ChipFactory::createChip(const std::string& type) {
    MCList::iterator existing = Chips.find(type);
    if (existing != Chips.end()) {
        return (existing->second);
    }
    if (type == "R500") {
        return Chips[type] = new ChipR500();
    }
    if (type == "PIC32F42") {
        return Chips[type] = new ChipPIC32F42();
    }
    if (type == "34HC22") {
        return Chips[type] = new Chip34HC22();
    }
    return 0;
}

Eu imaginaria criar um mapa, com string como chave e o construtor (ou algo para criar o objeto). Depois disso, posso obter o construtor do mapa usando o tipo (type são strings) e criar meu objeto sem if. (Eu sei que estou sendo um pouco paranóico, mas quero saber se isso pode ser feito ou não.)

questionAnswers(8)

yourAnswerToTheQuestion