Сколько я должен использовать строгую типизацию, чтобы обеспечить правильность во время компиляции?

Встроенные типы (а также типы из std) используются повсеместно в качестве параметров функций и конструкторов, хотя не каждый экземпляр этих типов будет допустимым входным параметром.

Примеры:

// There is no guarantee that url is actually a url
void make_http_request(const std::string& url);

// Here we know that it must be a url
void make_http_request(const url& url);

// There is no way of knowing if this is the correct mutex to lock
void insert_into_db(std::mutex mutex);

// Here we know we have the correct mutex
void insert_into_db(db_mutex mutex);

Это, конечно, никогда не должно использоваться для атрибутов объекта, который вы не можете контролировать. Например, вы можете сделать класс connected_socket но если сверстник закрывает связь, класс становится ошибкой. Однако его можно использовать для того, чтобы сокет IPv4 UDP никогда не пытался sendto() конечная точка IPv6.

Чем больше вы делаете это, тем больше вы можете убедиться, что ваша программа действительна во время компиляции (а кому это не нравится?). Что-то не так с этой практикой и будет ли это считаться хорошим? Каковы недостатки и стоит ли это того?

Простите, если это понятие носит другое имя, и я просто не смог его найти.

1

Решение

Есть директива в Основные положения C ++ об этом:

I.4: Сделать интерфейсы точно и строго типизированными

причина

Типы являются самой простой и лучшей документацией, имеют четко определенное значение и гарантированно проверяются во время компиляции. Кроме того, точно типизированный код часто оптимизируется лучше.

Это дает несколько примеров. Это действительно не говорит о том, как далеко это слишком далеко, хотя.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]