¿Cómo puedo determinar si un tipo se deriva de una clase de plantilla? En particular, necesito determinar si un parámetro de plantilla tiene std::basic_ostream
como una clase base. Normalmente std::is_base_of
es la herramienta para el trabajo. Sin embargo, std::is_base_of
solo funciona para tipos completos, no para plantillas de clase.¿Cómo determinar si un tipo se deriva de una clase de plantilla?
Estoy buscando algo como esto.
template< typename T >
bool is_based_in_basic_ostream(T&& t)
{
if(std::is_base_of< std::basic_ostream< /*anything*/>, T >::value)
{
return true;
}
else
{
return false;
}
}
Estoy seguro de que esto se puede hacer, no puedo pensar cómo.
Solo quiero lanzar ... puede reemplazar esa rama if/else completa con solo una línea 'return' que devuelve la condición en la instrucción if. – AshleysBrain
es 'typename T' un tipo completo? ¿Qué especificarías como '/ * cualquier cosa * /' en tu código? – iammilind
En mi situación, solo esperaría ver los tipos de caracteres integrales allí. Creo que el basic_ostream no puede ser instanciado a menos que '/ * anything * /' sea un tipo completo. –