STL : gestion des exception. appel explicite?

STL : gestion des exception. appel explicite? - C++ - Programmation

Marsh Posté le 27-01-2004 à 08:50:34    

Hello,
 
Voilà le soucis. Comme on peut le voir dans ce code,  
http://cplus.about.com/library/weekly/aa122202d.htm
 
l'appel à l'exception est explicite
 

Code :
  1. try {
  2.         if (y == 0) {
  3.             throw DivideByZero(x, y);
  4.         }


Peux-t-ton récupérer une exception sans utiliser cette méthode ?
Je pensais à qqch comme ça :
 

Code :
  1. try
  2.     {
  3.     int nombre = 20 ;
  4.     for (int i=-5 ; i<6 ; ++i)
  5.         cout << nombre/i << endl ;
  6.     }
  7.     catch(const std::exception &e)
  8.     {
  9.     cout << e.what() ;
  10.     }


 
Merci
 
 
 
 
 

Reply

Marsh Posté le 27-01-2004 à 08:50:34   

Reply

Marsh Posté le 27-01-2004 à 08:54:25    

les exceptions ça fonctionne sur le principe : déclencheur - gestionnaire. donc si tu veux attraper une exception, encore faut il que quelqu'un la lance.
 
enfin j'ai rien compris
 
 
note que cet article est mauvais, leur exception à la con ne dérivant pas de std::exception.
 
moi j'aurais carrément fait un exception template :D

Reply

Marsh Posté le 27-01-2004 à 09:02:11    

je m'attendait à te voir ici Taz. :)
 
Oui en fait ce que j'aimerais faire c'est laisser déclencher au système l'exception division par 0, et la traiter ensuite. Sans pour autant tester et déclencher l'exception. Tu vois l'astuce ?

Reply

Marsh Posté le 27-01-2004 à 09:05:42    

le système en déclenchera pas, vu qu'une division par zéro est un comportement indéfini (UB). certains système jète une exception, d'autres non. donc pas possible de reposer sur le système. de toutes façons aucune expcetion standard ne représente ça. tu peux travailler avec un truc à la CheckedNumeric<T>


Message édité par Taz le 27-01-2004 à 09:06:10
Reply

Marsh Posté le 27-01-2004 à 09:08:54    

ok merci

Reply

Marsh Posté le 27-01-2004 à 09:09:40    

pis bon, le C++ te tape les merdes du C et a été conçu sans exceptions : la logique générale est donc plus LBYL que EAFP

Reply

Marsh Posté le 29-01-2004 à 21:56:30    

Dans ce genre d'erreur bas niveau, le langage n'est d'aucune utilité. Si tu bosses exclusivement sous windows il reste les SEH ...

Reply

Marsh Posté le 29-01-2004 à 22:52:46    

SEH ?

Reply

Marsh Posté le 29-01-2004 à 22:56:56    

Structured Exception Handling

Reply

Marsh Posté le 30-01-2004 à 03:54:34    

exemple a la con d'utilisation des SEH
 

Code :
  1. __try
  2.         {
  3.             const CObject* pObj = reinterpret_cast<const CObject*>(pPtr);
  4.             if(pObj && pObj->m_dwObjId == OBJID)
  5.                 return pObj;
  6.             else
  7.                 return 0;
  8.         }
  9.         __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
  10.         {
  11.             DPF("Object - Bad pointer Caused Access Violation" );
  12.             return 0;
  13.         }


 
Au niveau du coût c'est peu cher (remplacement du pointeur vers le exception handler à la volée)
 
Attention aux constructeurs/destructeurs C++, mais il y a un warning en general.
 
LeGreg


Message édité par LeGreg le 30-01-2004 à 03:54:52
Reply

Marsh Posté le 30-01-2004 à 03:54:34   

Reply

Marsh Posté le 30-01-2004 à 04:05:01    

et ça marche pas non plus en Windows 16.
 
LeGreg

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed