Pregunta

SFINAE nos permite detectar si un tipo tiene ciertos miembros de datos o funciones miembro. Puede también ser utilizado para detectar si un tipo que existe en absoluto? Antecedentes:. Quiero saber si <vector> se incluyó o no

¿Fue útil?

Solución

Se puede hacer, aunque yo sólo las he arreglado para hacer que funcione en C ++ 0x.

struct no_type {};
struct is_vector_included {
    template<typename U> static decltype(std::vector<U>::iterator()) func( U* );
    template<typename U> static no_type func( ... );
    static const bool value = !std::is_same<no_type, decltype(func<int>(nullptr))>::value;
};

La estructura es muy curiosa y aunque no debe haber ciertas simplificaciones obvias, no funcionan. Más importante aún, ¿por qué no sólo #include <vector> para estar seguro?

Otros consejos

Tengo un problema con la pregunta:

Si no se incluyó <vector>, entonces ¿cómo se puede probar si un tipo se ha introducido en la unidad de traducción sin saber al respecto?

Usted está pidiendo con eficacia el compilador a prueba si existe vector, pero ¿cómo se puede pedir que sin declarar vector en primer lugar?

No veo cómo cualquier solución podría trabajar y ser compatible con el estándar, pero no soy standardista por lo que podría ser una advertencia que no conozco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top