Detectar la existencia de tipos
-
25-09-2019 - |
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
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.