As exceções devem ser encadeadas em C ++? [duplicado]

Esta pergunta já tem uma resposta aqui:

Maneira adequada / elegante de implementar o encadeamento de exceções em C ++? 4 respostasComo simular uma exceção interna em C ++ 6 respostas

Acabei de terminar o trabalho em um programa C ++ em que implementei minhas próprias exceções (embora derivadas de std :: exception). A prática que apliquei quando uma exceção causa uma reação em cadeia, propagando o erro para cima e dando origem a outras exceções, é concatenar a mensagem de erro em cada etapa apropriada nos módulos (classes de leitura). I.e. a própria exceção antiga é descartada e uma nova exceção é criada, mas com uma mensagem de erro mais longa.

Isso pode ter funcionado para o meu pequeno programa, mas no final não fiquei muito satisfeito com minha abordagem. Por um lado, os números de linha (embora não sejam aplicados no momento) e os nomes de arquivos não são mantidos, exceto pela última exceção; e realmente essa informação é de maior interesse na primeira exceção.

Eu acho que isso poderia ter sido tratado melhor encadeando exceções; ou seja, a exceção antiga é fornecida no construtor da nova exceção. Mas como isso seria implementado? As exceções não morrem quando ficam fora do escopo do método, impedindo assim o uso de ponteiros de exceção? E como copiar e armazenar a exceção, se a exceção puder ser de qualquer classe derivada?

Em última análise, isso me levou a considerar se as exceções de encadeamento em C ++ são uma boa idéia, afinal. Talvez deva apenas criar uma exceção e depois adicionar dados adicionais a ela (como eu venho fazendo, mas provavelmente de uma maneira muito melhor)?

Qual a sua resposta para isso? As exceções causadas por outra pessoa devem ser encadeadas para reter uma espécie de "rastreamento de exceção" - e como isso deve ser implementado? - ou uma única exceção deve ser usada e dados adicionais anexados a ela - e como isso deve ser feito?

questionAnswers(4)

yourAnswerToTheQuestion