Безопасный способ получить / найти вершину в графе с пользовательскими свойствами -> хорошая практика программирования? - PullRequest
2 голосов
/ 17 марта 2010

Я пишу Graph-класс с использованием boost-graph-library. Я использую пользовательские свойства вершин и ребер и карту для хранения / поиска вершин / ребер для данного свойства.
Пока что я доволен тем, как это работает.
Тем не менее, у меня есть небольшая проблема, когда я не уверен, как решить ее «красиво». Класс предоставляет метод

Vertex getVertex(Vertexproperties v_prop)

и метод

bool hasVertex(Vertexproperties v_prop)

Вопрос теперь в том, считаете ли вы это хорошей практикой программирования на C ++?
Мое мнение таково, что я должен сначала проверить, доступно ли что-то, прежде чем я смогу это получить. Поэтому, прежде чем получить вершину с требуемым свойством, нужно проверить, вернет ли hasVertex () значение true для этих свойств.
Тем не менее, я хотел бы сделать getVertex () немного более надежным. ATM будет вызывать сегрегацию, когда будет вызван метод getVertex () без предварительной проверки, имеет ли граф соответствующую вершину. Первой идеей было вернуть NULL-указатель или указатель, который указывает за последней сохраненной вершины. Что касается последнего, я не выяснил, как это сделать.
Но даже с этой «надежной» версией нужно будет проверять правильность после получения вершины, или можно столкнуться с SegFault, например, при разыменовании этого указателя вершины. Поэтому мне интересно, если это нормально, позволить getVertex () SegFault, если кто-то заранее не проверяет наличие?

1 Ответ

0 голосов
/ 17 марта 2010

Я бы изменил это на:

bool getVertex(Vertex& vertex, Vertexproperties v_prop);

или getVertex поднять исключение, если вершина не найдена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...