Как стать автором
Обновить
8
0
Артём Пеленицын @ulysses

Функциональное программирование

Отправить сообщение

Я ни в чём никого не упрекаю. Моя мысль такая, что прослушав пару докладов Саттона одно или двухгодичной давности можно было бы написать вариант с определением rvalue через enable_if+type_traits довольно быстро. Потому что там это всё разжёвывается хорошо. Ну и компилятор писать я вас ни в коем случае не призываю. Просто пишу о пользе просмотра докладов ведущих специалистов.

Поздравляю, вы переизобрели кусочек Concepts Lite! Которые, как вы упомянули, надысь выбросили из C++17. Вы можете сравнить свою логику и логику Саттона (Andrew Sutton), если включите какой-нибудь его доклад на Ютубе. Идея та же: CL это лёгкая обёртка над enable_if. Проблем несколько. Первая порция, которая касается вашего решения и не касается его реализации на уровне компилятора: это, как тоже сказали выше, время компиляции и, более важно, информативность ошибок (особенно в вашей версии с макросом она будет жуткой, думаю). Саттон специально отмечает, что на уровне компилятора это лучше решать.


Про перегрузку вы сами написали. Есть ещё проблема, которая касается и вашего решения, и CL: нет проверки ограничений внутри тела шаблона. То есть вы можете выставить какой-то концепт-интерфейс, но внутри шаблона использовать больше, чем затребовали в этом интерфейсе (по недосмотру, который не так уж нереален в таком тяжёлом и синтаксически и семантически языке как C++). Конечно, ошибка будет на стадии компиляции. Но всё равно досадно. Особенно если это библиотека и на неё напорется какой-то неискушённый пользователь этой библиотеки.

У вас ссылки на две картинки побились: Кнопка «Fork» и Событие закрытия пулл реквеста. А так: спасибо за статью.
Первое. Собственно, нашлось: tex.stackexchange.com/a/165326/7460
Есть такой вопрос относительно бланков, который почему-то на форумах не могу найти, хотя он кажется очевидным: если я хочу заполнять составленный в Латехе бланк не руками, а в Латехе же, то что делать? Проблема в следующем: вот ваш первый пример, поля Кому, от и т. д. Как добавить в них текст так, чтобы линия до конца строки оставалась на том же месте, что у вас в пусто бланке?
Почта или нет, это неважно: вопрос в том, вы отдавали документы просто стопкой или засовывали их в один файл/папку? Просто Если никак не скреплять, как они не растеряют их… та же квитанция, которая малого формата, первая выпадет при случае…
Сшил кое-как, в общем…

Скажите, пожалуйста, как все эти бумажки вместе собирать: просто сложить в большой почтовый конверт? Или ещё в папку вложить?
О, здорово, спасибо!

А как вы рекомендуете проделывать дырки и прошивать? Дурацкое вот требование… Чем вы делаете дырки и какими нитками сшиваете (обычными?).
А зачем реферат в двух экземплярах? Нигде не вижу об этом в приложении 5 на сайте ФИПС.
Ссылки на сайт ФИПС («Образцы заявлений и примеры их заполнений», «Разъяснения по поводу заполнения граф заявления в отдельности», «как, когда и куда», …) побились.

Я вот не понимаю про генерального директора и печать: откуда у физлица печать и директор?
+1 за Primer (Лимпан, Лажойе, Му), 5-е издание новенькое (только на английском, правда).
О, спасибо, на заметил выхода этого издания.
> Кстати, пример у меня работает и без operator T &().
Эмм, operator>> как написать без неконстантного преобразования? (У меня не компилируется даже, естественно.)

Насчёт implicit_cast не понял: как без реализации операции преобразования типа это будет работать.

Насчёт get: спасибо, хороший вопрос (наверное, добавлю в текст статьи). Именно преобразования нужны в примерах типа:
    std::ifstream in("f.dat");
    int arr2[6];
    std::copy(std::istream_iterator< wrap<int> >(in),
            std::istream_iterator< wrap<int> >(), arr2);
Ой, извиняюсь: мне показалось, что это был ответ к моему комментарию.
Это точно. В этом и была цель, как ни странно!
Это просто один пример оптимизации, которая исключает вызов нетривиального копиктора, — такой оптимизации, которая, следуя вашей логике, просто не может существовать:
> Нет, компилятор не сможет это оптимизировать, он обязан копировать — мало ли какйо у вас там нестандартный конструктор копирования
так что и логика не верна.

В целом, убеждать вас в мощи оптимизации современных компиляторов у меня желания нет. Я просто утверждаю, что в моих частных задачах оверхед (который, я всё ещё утверждаю, вам не удастся легко избежать: на вопрос про указатель на константу вы так и не ответили) не существенен. Если в вашей задаче он существенен — поступайте как считаете нужным…
Как де я буду писать в память по константному указателю? (Под «константым указателем», я прошу прощения, имел ввиду указатель на константу.)

Про оптимизации вы зря так уверены. Для GCC (под которым я работаю) если специально не отключать оптимизацию RVO, то вызов даже нетривиального копиктора будет “optimized-out” (можете посмотреть соответствующий пример в Вкипедии: RVO: Summary). Только не надо, пожалуйста, ругаться на GCC :)
Ну, зачем вы приписываете мне то, чего я и близко не говорил. Детей просто надо учить C++ и STL. Это не я придумал: программа такая, и мне неинтересно обсуждать эту программу: тема не об этом. fread/fwrite это не STL, так что в данной теме это также оффтоп (от чего я и предостерегал в заключении статьи), хотя этому тоже, конечно, надо учить.
Большую часть ваших претензий можно предъявить к любым итераторам потоков ввода-вывода. Таковы принципы работы с потоками C++ и STL…

Информация

В рейтинге
Не участвует
Откуда
США
Зарегистрирован
Активность