Actuellement, j'ai ce code pour préfixer un « tag » à un message d'exception qui me donne une version très légère d'une trace de la pile:Préfixer une chaîne à une autre chaîne
try {
doSomething();
} catch (std::exception& e) {
int size = 8 + _tcslen(e.what());
TCHAR* error = new TCHAR[size];
_sntprintf(error, size, TEXT("myTag: %s"), e.what());
std::exception x = std::exception(error);
delete []error;
throw x;
}
Il semble tout simplement horrible et je Je suis sûr qu'il doit y avoir un moyen facile d'y parvenir. Pourriez-vous s'il vous plaît m'aider avec cela?
Vous avez une réponse à votre question de traitement de chaîne, mais je dois dire que votre gestion des exceptions semble assez suspect. Vous avez attrapé une exception 'e', qui peut être de n'importe quelle classe dérivée de std :: exception, mais vous êtes alors en train de découper e et de perdre le type e. –
merci pour le commentaire. Je n'y ai pas pensé depuis que je lance seulement std :: exception dans la fonction interne. Cependant, je vois maintenant ce que tu veux dire. Quelle serait l'alternative? Modifier le texte interne what() directement et lancer l'exception originale? – Etan
* Vous * ne pouvez lancer explicitement std :: exceptions, mais le STL peut aussi lancer. Si vous voulez seulement gérer vos propres exceptions, pensez à écrire votre propre classe d'exception où vous pouvez modifier la chaîne? –