2010-03-26 10 views
5

Después de un forcejeo logré impulsar punteros inteligentes para construir para Windows CE/Mobile al nivel de advertencia 4.impulsar punteros inteligentes y BOOST_NO_MEMBER_TEMPLATES

me encontré con la menor resistencia-manera de deshacerse de los errores de compilación y advertencias ser

#define BOOST_NO_MEMBER_TEMPLATES 

¿Qué significa realmente? ¿Vendí mi alma al diablo? ¿Se romperá el infierno cuando en realidad use los tipos?

Respuesta

4

No debería haber ningún efecto negativo per se, solo una pérdida de funcionalidad.

Una plantilla es miembro de una función miembro que es una plantilla, por ejemplo:

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

Así que usted no recibe un comportamiento indefinido ni nada, simplemente no se puede programar las cosas de una manera más genérica. Creo que una respuesta definitiva de "esto es malo" depende de exactamente para qué se estaba utilizando y de la solución.

En cuanto a smart_ptr, por ejemplo, la versión no-miembros-plantillas, literalmente, sólo lleva a cabo las plantillas miembros, tales como:

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

y reemplaza Y con T, por lo que se pierde la capacidad para algunos automática conversiones

Cuestiones relacionadas