|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|
Реализация схожих функций без копипаста19.06.2017, 14:05. Показов 2214. Ответов 39
Метки нет (Все метки)
Приветствую.
Задача: имеется несколько схожих функций (одинаковые параметры, код отличается минимально - в одном месте) Функции довольно большие, разбить на части не вариант - циклы и прочее. Как в с++ реализовать это правильно, без стен бойлерплейта? Все что придумал - завернуть в дефайн, но это как-то немножко слишком.
0
|
|
| 19.06.2017, 14:05 | |
|
Ответы с готовыми решениями:
39
Перегрузка функций. Реализация функций
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 15:48 [ТС] | |||
|
Но внушает опасение существование if constexpr - если все так радужно, то зачем вообще оно нужно? То есть понятно что с constexpr лишние ветки даже компилироваться не будут - а без constexpr будут скомпилированы, и (возможно) вырезаны оптимизатором. Если это вся разница - то такой вариант подходит. Добавлено через 39 секунд
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 19.06.2017, 15:59 | |||||||
|
nonenever, возможно пойдет и что-то вроде этого:
Добавлено через 2 минуты
0
|
|||||||
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||||||
| 19.06.2017, 16:00 | ||||||
|
там можно сделать так
0
|
||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 16:04 [ТС] | ||
|
Если будут варианты отличающиеся только вызываемой функцией - так и сделаю. Для варианта где вызова может не быть вовсе - не подходит, там придется лепить шаблоны с ифами, хотя бы без constexpr - если с++17 не получится.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||
| 19.06.2017, 16:18 | ||||||||
![]() Добавлено через 2 минуты
0
|
||||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 16:36 [ТС] | |||
|
Но (насколько я понял) стек дергает лишний раз, что не хорошо - но хотя бы не бранчит. При прочих равных - минимум бойлерплейта. А количество кода как такового не особенно важно, у меня не тот случай чтобы в L1 не лезло.
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 19.06.2017, 16:54 | |||
![]() В боевом коде, да, надо смотреть, но если не злоупотреблять, то тоже все будет хорошо. Ну и, конечно же, проверяй ассемблер, если хочешь знать наверняка. Добавлено через 15 минут Смотри сюда: https://godbolt.org/g/yo18Vi Как видишь, я взял старый компилятор GCC 4.4.7, с опцией оптимизации -O1. Если переписать этот код без всех ухищрений, копи-пастом, то получим абсолютно тоже самое: https://godbolt.org/g/irBrpj Вывод - не надо бояться функций
0
|
|||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 16:57 [ТС] | |||
|
Правда, операторный вариант гораздо страшнее - и это хорошо, люблю такие штуки. Добавлено через 1 минуту Поэтому везде где надо сам ставлю inline.
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 19.06.2017, 16:59 | |||
|
Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||
| 19.06.2017, 17:01 [ТС] | |||
|
size_t - это практически инт, насколько я помню. Добавлено через 31 секунду И пусть никто не уйдет.
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 19.06.2017, 17:03 | |
|
0
|
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:05 [ТС] | ||
|
И это хорошо - динамикой пусть в пхп и прочих питонах развлекаются.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 19.06.2017, 17:10 | |||||||
Не скомпилируется это. Если есть подобные случаи и нет доступного constexpr if, то делать придется так, как я выше показывал. Ну или вариации на тему.Добавлено через 4 минуты auto - это вообще не динамика. auto - это этап компиляции. А ошибка там от того, что if требует вычислимости всех веток, а типы в return в этих ветках - разные. Вот компилятор и не может на этапе компиляции определить сигнатуру инстанцированной функции.
0
|
|||||||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:16 [ТС] | ||
|
Через пару стандартов будет и настоящая, процесс скатывания в пхп необратим.
0
|
||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 19.06.2017, 17:29 | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 19.06.2017, 17:31 | ||
|
С++ никогда не станет динамически типизированным языком, т.к. это сломает всю его наследственность. Столько усилий сейчас прикладывают в комитете для того, что добавить в язык новые возможности, при этом сохранив совместимость со старым кодом, очень неохотно отказываются от давно неиспользуемых вещей. Это огромная работа по вписыванию новых концепций в старую архитектуру, где нужно и legacy поддержать и not-pay-for-what-you-don't-use обеспечить. И тут бац, такое кардинальное изменение - смена всей парадигмы, которая сделает из С++, по сути, новый язык. Зачем нужно было столько страдать, чтобы разом все сломать? Нет, этого не будет никогда. А если кто-то считает, что будет - он просто вообще, полностью и бесповоротно не понимает С++ и его философию.
0
|
||
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
|||||
| 19.06.2017, 17:38 [ТС] | |||||
|
Насколько я в курсе, другой динамики для компилируемых вообще не бывает. И да, динамика/статика и строгая/нестрогая - это почти ортогональные вещи. Добавлено через 3 минуты
0
|
|||||
| 19.06.2017, 17:42 | |
|
0
|
|
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 19.06.2017, 17:46 | |
|
nonenever, я могу вам только одно сказать - https://habrahabr.ru/post/161205/
0
|
|
|
0 / 0 / 2
Регистрация: 19.06.2017
Сообщений: 28
|
||
| 19.06.2017, 17:55 [ТС] | ||
|
1) Динамики в классическом виде в компилируемых языках не бывает, самое похожее что есть - это авто. 2) Динамика/статика и строгая/нестрогая - ортогональные понятия.
0
|
||
| 19.06.2017, 17:55 | |
|
Реализация функций Реализация функций Влияние копипаста на Seo для тегов сайта Реализация функций в БД магазина Реализация встроенных функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
28. КОнкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|