No sé cómo expresar la pregunta muy bien en una breve línea de asunto, así que déjame intentar una explicación más larga. Supongamos que tengo estas clases de excepción:¿Se puede capturar una excepción por el tipo de operador de conversión?
class ExceptionTypeA : public std::runtime_error
{
// stuff
};
class ExceptionTypeB : public std::runtime_error
{
// stuff
operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA
};
¿Puedo hacer esto y hacer que active el bloque catch?
try
{
throw ExceptionTypeB();
}
catch (ExceptionTypeA& a)
{
// will this be triggered?
}
voy a suponer que no lo hará, lo cual es lamentable, pero pensé que le pediría, ya que no pude encontrar ninguna información sobre el mismo en la red o en el pliego de cargos. Y sí, me doy cuenta de que podría simplemente ejecutar el programa en mi compilador y ver qué pasa, pero eso no me dice qué dice el estándar sobre este comportamiento, solo lo que implementa mi compilador (y no confío en él).
Phew. Un suspiro de alivio aquí. – sbi
hace esto puntero de la cubierta a los miembros? por ejemplo, los datos de puntero a miembro son contravariantes, por lo que 'int (Base :: *)' se puede convertir a 'int (Derived :: *)'. ¿Puedo atrapar el último si tiro el primero? gcc parece estar en desacuerdo, pero la redacción estándar es un poco confusa. – max