2010-11-06 6 views
1

Existe-t-il un moyen de détecter statiquement si un membre d'une classe peut déclencher une exception? Un truc de métaprogrammation?Détection si un type déclenche

+6

Que voulez-vous dire exactement? Si une fonction membre lance? Si le constructeur jette? Tous les deux? –

+2

et voulez-vous dire si elle * peut * jeter une exception? Ou s'il le fait réellement pour un ensemble donné d'entrées? (Ce qui nécessiterait de résoudre le problème d'arrêt) (de même que le premier, à moins que vous n'autorisiez les faux positifs) – jalf

+1

... et avez-vous besoin de le détecter statiquement (temps de compilation) ou dynamiquement (temps d'exécution)? –

Répondre

2

Non vous ne pouvez pas (en supposant que vous voulez savoir que la méthode lève une exception). Le programmeur peut utiliser le mot-clé "throw" dans la déclaration de méthode, mais il est facultatif. Il n'y a donc pas moyen de savoir si une méthode déclenche une exception.

0

En C++, il n'y a pas d'équivalent d'exceptions vérifiées comme en Java.
Il n'est donc pas possible de savoir si une méthode génère une exception, sauf si elle est documentée ou si vous connaissez les détails d'implémentation.
Une méthode, par exemple, qui fonctionne uniquement sur les types de build-in est garantie de ne lancer aucune exception.
Une méthode qui a la spécification throw vide dans la déclaration qu'il a « dit » qu'il ne lèvera une exception pour les erreurs mortelles

int foo() throw(); //does not mean it will never throw an exception 

Même attribution par l'opérateur new peut lancer une exception.
Il est de la responsabilité du programmeur de spécifier explicitement ce que le non-jet garantit à ses méthodes.

Questions connexes