Utilizzare un modello per ottenere un comportamento alternativo?

3

È una cattiva pratica?

const int sId(int const id);

// true/false it doesn't matter
template<bool i>
const int sId(int const id) {
    return this->id = id;
}

const int MCard::sId(int const id){
    MCard card = *this;

    this->id = id;

    this->onChange.fire(EventArgs<MCard&, MCard&>(*this, card));

    return this->id;
}

myCard.sId(9);

myCard.sId<true>(8);

Come puoi vedere, il mio obiettivo è essere in grado di avere un comportamento alternativo per SID.
So che potrei usare un secondo parametro per la funzione e usare un if, ma questo sembra più divertente (imo) e potrebbe prevenire la previsione di branch (non sono esperto in quel campo).

Quindi, è una pratica valida e / o c'è un approccio migliore?

    
posta Serge 09.06.2014 - 12:06
fonte

1 risposta

10

In realtà, sembra che tu stia semplicemente complicando le cose, il che potrebbe offuscare il tuo codice. Questo

sId

e questo

sId<true>

sono solo due diverse funzioni. E il modo standard di implementare due diverse funzioni (con la stessa firma) è semplicemente utilizzare due diversi nomi di funzione, senza il voodoo del modello, come sIdWithoutEvent e sId (supponendo che quest'ultimo stia chiamando l'evento).

    
risposta data 09.06.2014 - 12:21
fonte

Leggi altre domande sui tag