|
|
|||||||
С++ идиомы31.07.2016, 19:20. Показов 159186. Ответов 34
Метки нет (Все метки)
Перевод статей 1 и 2. Будет постепенно обновляться. Желающие внести вклад могут писать в ЛС.
Переведенные идиомы: self-assignment in an assignment operator Scope Guard Shrink-to-fit Checked delete Pointer To Implementation Получение адреса(ака взятие адреса aka Address-of) nullptr Iterator Pair Coercion by Member Template
14
|
|||||||
| 31.07.2016, 19:20 | |
|
Ответы с готовыми решениями:
34
С++ идиомы - обсуждение
|
|
фрилансер
6482 / 5708 / 1132
Регистрация: 11.10.2019
Сообщений: 15,222
|
||||||
| 14.03.2021, 21:21 | ||||||
|
JeyCi,
1
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 16.03.2021, 14:56 | ||
|
Вообще я убежден, что CRTP должен быть элементом дизайна, а не оптимизации. Нет никакого смысла вводить его только ради оптимизации. Должны быть более фундаментальные причины.
1
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 16.03.2021, 15:44 | |
|
JeyCi, я вам тут прикрепил pdf-ку со статьей из журнала C++ Report от 95 года по CRTP. Думаю полезно будет ознакомиться для полного понимания.
2
|
|
|
Любитель чаепитий
|
|||||||
| 16.03.2021, 16:36 | |||||||
|
Не по теме:
Кликните здесь для просмотра всего текста
1
|
|||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
|||
| 16.03.2021, 20:20 | |||
|
DrOffset, спасибо... начинаю понимать, как создаётся язык (что и есть цель ООП по сравнению с процедурным пр-ем), паттерны и Finite State Machine
... - прямо откровения от автора ... интересные... особенно понравилась фраза
Pros: 1) шаблон генерит функции для потомков авоматически, чтобы их не писать во всех потомках - в классическом варианте 2) по расширенной версии с базовым классом... использование перекрёстного приведения (своеобразный dynamic-cast)
вообще, интересный трюк - наследоваться от базового и от template'ового... - наверно, даже таким способом и страховку от "алмаза смерти" можно изобрести?... не пробовала ещё... только вот получить наследника второй очереди - с этим наследуемым виртуальным clone(), задаваемым в шаблоне, чтобы не прописывать его во всех наследниках, - уже вроде не получится .... Добавлено через 6 минут P.S. значит new от строк 63-65 надо потом delete.. т.е. они, вероятно, не от-move-ились в unique_ptr, а, наверно, от-copy-лись... простите за выражения
0
|
|||
| 17.03.2021, 07:09 | |
|
0
|
|
| 17.03.2021, 07:31 | |
|
0
|
|
| 17.03.2021, 07:31 | ||||||
|
Не по теме: JeyCi, утечка там вот тут:
0
|
||||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
||
| 18.03.2021, 08:57 | ||
|
p.s. для меня могут быть только 4 фундаментальные причины:- для увеличения скорости, - для минимизации памяти, - для минимизации писанины, - для того, чтобы не потерять что-нибудь (что приводит к memory leaks)... разве есть ещё какие-то более фундаментальные причины, например для использования CRTP?..
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 18.03.2021, 09:16 | |||
|
И суть моих слов в том, что дизайн должен быть основным критерием, а не производительность. В смысле, что производительность - это следствие, а не первопричина.
0
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
|||
| 18.03.2021, 13:07 | |||
спасибо за view: performance <-design-> optimization (& 1<->3)
0
|
|||
| 18.03.2021, 15:45 | |
|
Не по теме: Да хорош тему засерать и тролиху кормить.
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
||
| 23.03.2021, 18:40 | ||
|
только сейчас поняла, почему clone() - рудимент от фабрики - может быть любая др. функция...
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
||||
| 18.05.2021, 19:55 | ||||
|
да, с CRTP-фабрикой, - примером с wiki, - я всё-таки поспешила...
=== - полагаю, желание/потребность подрядить ленивые вычисления/методы и может стать фундаментальным аргументом в пользу выбора CRTP (иных пока не вижу)... только я пока не выбирала ленивые методы... как бы не вижу в них преимуществ... разве что по памяти (чтобы функции-члены не инстанцировались в случае, если вдруг потом могут и не понадобится)... имхо Добавлено через 4 минуты p.s. вероятно, для подмешивания этот трюк в основном используется... так же
0
|
||||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,538
|
||||||||||
| 19.05.2021, 10:42 | ||||||||||
Кликните здесь для просмотра всего текста
- всё-таки доп. уровень косвенности в CRTP через друзей может помочь и избежать "Алмаза смерти" (подробнее здесь - смысл friend в подмешивании)... === и так же (по последнему линку) - это попытка избавиться от большого количества static_cast'ов при реализации CRTP-паттерна, которая как раз и заключается в выносе всех static_cast'ов на верх. уровень иерархии, а чтобы оттуда не получить ромбовидного наследования - использование template'а, принимающего параметром тоже template (а не конкретный type)
в общем, CRTP, конечно, вариант, когда все типы известны на этапе компиляции, - для статического полиморфизма... но всё-таки глубокие иерархии всё равно не стоит делать... а диспетчеризация через visit и variant в std даёт нужное и без иерархий... появление std::variant -- всё-таки большой шаг вперёд был в std... имхо
0
|
||||||||||
| 19.05.2021, 10:42 | |
|
Помогаю со студенческими работами здесь
35
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|