¿Deberían encadenarse excepciones en C ++? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Forma adecuada / elegante de implementar el encadenamiento de excepciones de C ++? 4 respuestasCómo simular una excepción interna en C ++ 6 respuestas

Acabo de terminar el trabajo en un programa C ++ donde implementé mis propias excepciones (aunque derivado de std :: exception). La práctica que he aplicado cuando una excepción provoca una reacción en cadena, propaga el error hacia arriba y da lugar a otras excepciones, es concatenar el mensaje de error en cada paso apropiado a través de los módulos (leer clases). Es decir. la antigua excepción en sí se descarta y se crea una nueva excepción, pero con un mensaje de error más largo.

Esto puede haber funcionado para mi pequeño programa, pero al final no estaba muy satisfecho con mi enfoque. Por un lado, los números de línea (aunque no se aplican en este momento) y los nombres de archivo no se conservan, excepto por la última excepción; y realmente esa información es de mayor interés en la primera excepción.

Me imagino que esto podría haberse manejado mejor encadenando excepciones juntas; es decir, la antigua excepción se proporciona en el constructor de la nueva excepción. Pero, ¿cómo se implementaría eso? ¿Las excepciones no mueren cuando quedan fuera del alcance del método, evitando así el uso de punteros de excepción? ¿Y cómo copiar y almacenar la excepción si la excepción puede ser de cualquier clase derivada?

Esto finalmente me llevó a considerar si encadenar excepciones en C ++ es una buena idea después de todo. ¿Quizás uno debería crear una excepción y luego agregar datos adicionales (como he estado haciendo, pero probablemente de una manera mucho mejor)?

¿Cuál es su respuesta a esto? ¿Deberían encadenarse las excepciones causadas por otro para retener una especie de "rastreo de excepción", y cómo debería implementarse? ¿O debería usarse una sola excepción y adjuntarse información adicional? ¿Y cómo debe hacerse?

Respuestas a la pregunta(4)

Su respuesta a la pregunta