Глядя на реализацию GEOS C ++ LinearLocation API , я заметил, что когда в API передается недопустимое значение для аргумента 'double segmentFraction' (значение должно быть в диапазоне [0.0, 1.0]), вместо этого сообщения об ошибке, библиотека молча преобразует их в некоторые допустимые значения или просто игнорирует их.
Глядя на эту реализацию , я вижу, что вместо того, чтобы сообщать недопустимые значения, библиотека молча преобразует их до 0,0 (для отрицательных значений) или 1,0 (если значение> 1,0).
LinearLocation::LinearLocation(size_t p_componentIndex,
size_t p_segmentIndex, double p_segmentFraction)
:
componentIndex(p_componentIndex),
segmentIndex(p_segmentIndex),
segmentFraction(p_segmentFraction)
{
normalize();
}
void
LinearLocation::normalize()
{
if(segmentFraction < 0.0) {
segmentFraction = 0.0;
}
if(segmentFraction > 1.0) {
segmentFraction = 1.0;
}
if(segmentFraction == 1.0) {
segmentFraction = 0.0;
segmentIndex += 1;
}
}
Другая реализация конструктора LinearLocation просто ничего не делает с недопустимыми значениями аргументов. (Однако у него есть метод LinearLocation :: isValid , чтобы проверить, действителен ли статус объекта, что IMHO нарушает рекомендации C ++ C .41: конструктор должен создать полностью инициализированный объект ).
Есть ли какая-то причина за этим дизайнерским решением для обработки ошибок?