Информация об изменениях

Сообщение Re: Указать тип параметра у функтора от 26.07.2018 14:54

Изменено 26.07.2018 15:04 Evgeny.Panasyuk

Re: Указать тип параметра у функтора
Здравствуйте, _NN_, Вы писали:

_NN>Нонеча тут пишу на современном C++, и понял, что я с лямбдами я что-то не понимаю.


Это относится практически ко всему шаблонно-обобщённому коду, а не только к лямбдам.

_NN>Вариант 2 добавляет ещё больше хлопот в поддержке.

_NN>Тут мало того что не видно типа, так и ещё не видно что ожидается.
_NN>Такой код писать тяжело, а про поддержку вообще молчу.

Это считай duck typing времени компиляции. В динамически типизированных языках типа Python тоже duck typing, только вместо ошибок компиляции — ошибки выполнения, и ничего — там тоже есть жизнь.

_NN>В идеале хотелось написать вот так и компилятор сам всё сделает и среда даст подсказки где надо.

_NN>Возможно уже есть предложения в стандарт ?

Конечно, и даже не одна версия, разных уровней навороченности. Называется "концепции"/concepts — вкратце это описание требований типам, которые передаются в шаблоны. В некоторых вариациях это не просто требования к типам, но ещё и интерфейс к ним — в этом случае код шаблонов использующих типы с таким интерфейсом будет фейлится ещё до instantiation в случае нарушения обозначеного интерфейса (что способствует раненому обнаружению ошибок).
Из-за них сильно задержался выход C++0x, который в итоге оказался C++11, но они до сих пор не вошли (к C++20 уже есть надежда).

А пока их нет — можно использовать комментарии/документацию (смотри например STL), внятные имена типов (например UnaryPredicate), а также разного рода костыли/эмуляции концепций а-ля Boost.ConceptCheck
Re: Указать тип параметра у функтора
Здравствуйте, _NN_, Вы писали:

_NN>Нонеча тут пишу на современном C++, и понял, что я с лямбдами я что-то не понимаю.


Это относится практически ко всему шаблонно-обобщённому коду, а не только к лямбдам.

_NN>Вариант 2 добавляет ещё больше хлопот в поддержке.

_NN>Тут мало того что не видно типа, так и ещё не видно что ожидается.
_NN>Такой код писать тяжело, а про поддержку вообще молчу.

Это считай duck typing времени компиляции. В динамически типизированных языках типа Python тоже duck typing, только вместо ошибок компиляции — ошибки выполнения, и ничего — там тоже есть жизнь.

_NN>В идеале хотелось написать вот так и компилятор сам всё сделает и среда даст подсказки где надо.

_NN>Возможно уже есть предложения в стандарт ?

Конечно, и даже не одна версия, разных уровней навороченности. Называется "концепции"/concepts — вкратце это описание требований к типам, которые передаются в шаблоны. В некоторых вариациях это не просто требования к типам, но ещё и интерфейс к ним — в этом случае код шаблонов использующих типы с таким интерфейсом будет фейлится ещё до instantiation в случае нарушения обозначеного интерфейса (что способствует раненому обнаружению ошибок).
Из-за них сильно задержался выход C++0x, который в итоге оказался C++11, но они до сих пор не вошли (к C++20 уже есть надежда).

А пока их нет — можно использовать комментарии/документацию (смотри например STL), внятные имена типов (например UnaryPredicate), а также разного рода костыли/эмуляции концепций а-ля Boost.ConceptCheck