S'assurer que les exceptions sont toujours interceptées

Les exceptions en C n'ont pas besoin d'être interceptées (pas d'erreurs de compilation) par la fonction appelante. C'est donc au développeur de juger s'il faut les attraper en utilisant try/catch (contrairement à Java).

Existe-t-il un moyen de s'assurer que les exceptions levées sont toujours interceptées à l'aide de try/catch par la fonction appelante ?

请先 登录 后评论

2 réponses

Ryan Fox

Ou vous pouvez commencer à lancer des exceptions critiques. Une exception de violation d'accès attirera l'attention de vos utilisateurs.

请先 登录 后评论
Scott Langham

Vous ne devriez pas utiliser d'exception ici. Ce n'est évidemment pas un cas exceptionnel si vous devez vous y attendre partout où vous utilisez cette fonction !

Une meilleure solution serait de faire en sorte que la fonction renvoie une instance de quelque chose comme ça. Dans les versions de débogage (en supposant que les développeurs utilisent les chemins de code qu'ils viennent d'écrire), ils obtiendront une assertion s'ils oublient de vérifier si l'opération a réussi ou non.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
请先 登录 后评论