Implementación anti-if del método de fábrica

Estoy aplicando el patrón de diseño Factory en mi proyecto C ++, y a continuación puedes ver cómo lo estoy haciendo. Intento mejorar mi código siguiendo la campaña "anti-if", por lo tanto, quiero eliminar las declaraciones if que tengo. ¿Alguna idea de cómo puedo hacerlo?

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;
}

Me imagino creando un mapa, con una cadena como clave, y el constructor (o algo para crear el objeto). Después de eso, puedo obtener el constructor del mapa usando el tipo (los tipos son cadenas) y crear mi objeto sin ningún tipo de if. (Sé que estoy siendo un poco paranoico, pero quiero saber si se puede hacer o no).

Respuestas a la pregunta(8)

Su respuesta a la pregunta