API GEOS LinearLocation игнорирует или автоматически изменяет недопустимые значения аргументов - PullRequest
0 голосов
/ 18 июня 2020

Глядя на реализацию 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: конструктор должен создать полностью инициализированный объект ).

Есть ли какая-то причина за этим дизайнерским решением для обработки ошибок?

...