2010-03-17 1 views
2

J'écris une classe Graph en utilisant boost-graph-library. J'utilise des propriétés de vertex et edge personnalisées et une carte pour stocker/trouver les sommets/arêtes pour une propriété donnée.
Je suis satisfait de la façon dont cela fonctionne, jusqu'à présent.
Cependant, j'ai un petit problème, où je ne suis pas sûr de savoir comment le résoudre "gentiment". La classe fournit une méthodeManière sûre d'obtenir/trouver un sommet dans un graphique avec des propriétés personnalisées -> bonne pratique de programmation?

Vertex getVertex(Vertexproperties v_prop) 

et une méthode

bool hasVertex(Vertexproperties v_prop) 

La question est maintenant, voulez-vous juger comme une bonne pratique de programmation en C++? Mon opinion est, que je dois d'abord vérifier si quelque chose est disponible avant que je puisse l'obtenir. Donc, avant d'obtenir un sommet avec une propriété désirée, il faut vérifier si hasVertex() retournera true pour ces propriétés.
Cependant, je voudrais rendre getVertex() un peu plus robuste. ATM va segfault quand on appellera directement getVertex() sans vérifier préalablement si le graphe a un sommet correspondant. Une première idée consistait à retourner un pointeur NULL ou un pointeur qui pointe passé le dernier sommet stocké. Pour ce dernier, je n'ai pas trouvé comment faire ça.
Mais même avec cette version "robuste", il faudrait vérifier l'exactitude après avoir obtenu un sommet ou bien on pourrait aussi lancer une SegFault lors du déréférencement de ce vertex-pointeur par exemple. Par conséquent, je me demande s'il est "ok" de laisser getVertex() SegFault si on ne vérifie pas la disponibilité à l'avance?

Répondre

0

Je soit changer cela:

bool getVertex(Vertex& vertex, Vertexproperties v_prop); 

ou ont getVertex lever une exception si le sommet ne se trouve pas.

Questions connexes