2010-03-17 24 views
5

È un modello/idioma comune utilizzare le funzioni libere come pseudo-costruttori per evitare di specificare esplicitamente i parametri del modello?Utilizzo della funzione libera come pseudo-costruttori per sfruttare la deduzione dei parametri del modello

Per esempio, tutti sanno di std::make_pair, che utilizza i suoi parametri di dedurre le pair tipi:

template <class A, class B> 
std::pair<A, B> make_pair(A a, B b) 
{ 
    return std::pair<A, B>(a, b); 
} 

// This allows you to call make_pair(1, 2), 
// instead of having to type pair<int, int>(1, 2) 
// as you can't get type deduction from the constructor. 

Lo STL fa anche un uso pesante di questo <functional> (bind1st, not1, ptr_fun, ecc ...)

Mi trovo ad usarlo abbastanza spesso, quindi mi stavo chiedendo se molte altre persone lo usano, e se c'è un nome per questo modello?

risposta

7

Apparentemente si chiama "Object Generator". Vedere "More C++ Idioms" e "Boost" su questo argomento.

Personalmente lo trovo molto utile e lo uso molto.

Inoltre, penso che si potrebbero vedere i modelli di espressioni come una forma speciale di generatori di oggetti, poiché tutto ciò che fanno è costruire tipi complessi per mezzo di tipi di operandi e dati che normalmente potreste specificare anche manualmente. Tranne che chiamano i generatori implicitamente

a + b + c => 
    Add<Add<A, B>, C>(...) 
+1

Preferisco certamente "generatore di oggetti", perché "funzione generatore" ha già un significato matematico. –

+0

@Poita_ accettato. Ora vedo che è un nome ben conosciuto e parte dei documenti di boost, quindi penso che li chiamerò anche generatori di oggetti :) –

+0

Adoro questo idioma e, in combinazione con 'auto', puoi creare complesse costruzioni di modelli senza mai esplicitamente specificando un parametro del modello. – GManNickG

Problemi correlati