2010-03-26 20 views
5

Dopo un po 'che lotta sono riuscito ad ottenere aumentare puntatori intelligenti per costruire per Windows CE/Mobile sul livello di allarme 4.aumentare puntatori intelligenti e BOOST_NO_MEMBER_TEMPLATES

ho trovato la minima resistenza-modo per sbarazzarsi di errori di compilazione e avvisi essere

#define BOOST_NO_MEMBER_TEMPLATES 

Che cosa significa in realtà? Ho venduto la mia anima al diavolo? Si scatenerà l'inferno quando effettivamente uso il dei tipi?

risposta

4

Non ci dovrebbero essere effetti negativi di per sé, solo una perdita di funzionalità.

Un modello membro è una funzione membro che è un modello, ad esempio:

struct foo 
{ 
    template <typename T> 
    void i_am_not_supported_sometimes(void); 
}; 

Quindi non si ottiene un comportamento indefinito o nulla, semplicemente non è possibile programmare le cose in maniera più generica. Penso che una risposta definitiva "è così cattiva" dipende esattamente da quello per cui è stata utilizzata e da cosa è stata la soluzione.

Guardando smart_ptr, per esempio, la versione non-member-templates prende letteralmente appena fuori i modelli di membro, come ad esempio:

template<class Y> 
explicit shared_ptr(Y * p): px(p), pn(p) // Y must be complete 
{ 
    boost::detail::sp_enable_shared_from_this(this, p, p); 
} 

e sostituisce Y con T, così si perde la capacità per alcuni automatica conversioni.

Problemi correlati