170 похожих чатов

Чем отличается crtp от передачи полиси класса, если и в

том и в том случае ты не можешь итерироваться по реализациям как по общим в иерархии классам ?

30 ответов

28 просмотров

В CRTP в методе base можно сделать так static_cast<derived*>(this)->some_method();

CRTP позволяет подмешивать какой-то свой бойлерплейт в пользовательские классы, завязанный на типы пользовательских же классов. В остальных случаях лучше принимать полиси класс

mixin для бедных

Ofee Oficsu
CRTP позволяет подмешивать какой-то свой бойлерпле...

В старые времена, Microsoft обожало использовать этот прием, чтобы обходиться без vtbl (ATL, WTL)

Aleksei-Budyakov Автор вопроса
Ofee Oficsu
CRTP позволяет подмешивать какой-то свой бойлерпле...

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

Aleksei-Budyakov Автор вопроса
Mikhail Kalugin
В CRTP в методе base можно сделать так static_cast...

Я в курсе. Вопрос в том, почему не полиси

Aleksei-Budyakov Автор вопроса
Mikhail Kalugin
В старые времена, Microsoft обожало использовать э...

Почему отказались, и что стало альтернативой ?

Aleksei Budyakov
Вы имеете ввиду что отнаследованый класс, если вкл...

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

Aleksei Budyakov
Вы имеете ввиду что отнаследованый класс, если вкл...

В общем вот так: D:B<D> это CRTP. D d; сделать в B не получится (что такое D? оно не определено в этот момент) сделать D* d; Можно как и каст выше.

Aleksei Budyakov
Вы имеете ввиду что отнаследованый класс, если вкл...

Я имею ввиду, что можно написать какую-нибудь сложную многословную шаблонную функцию, завязанную на тип наследника в базовом классе, чтобы не писать её в каждом наследнике

Crtp знаю, а что такое "передача политики класса" - нет

Ilya Zviagin
В ATL-то и без vtbl ?

Да, хотя давно туда не заглядывал, раньше они обходились статическим полиморфизмом.

Anatoly Shirokov
COM

Ну это одно и то же

Ilya Zviagin
Ну это одно и то же

OLE частный случай COM

Anatoly Shirokov
OLE частный случай COM

А COM - частый случай OLE

Anatoly Shirokov
COM

Имел ввиду только классы ATL а не COM вообще, если что.

Mikhail Kalugin
Имел ввиду только классы ATL а не COM вообще, если...

Ну там каждый класс - COM объект, и с vtbl, смысл там от него (vtbl) избавляться?

Ilya Zviagin
Ну там каждый класс - COM объект, и с vtbl, смысл ...

в ATL львиная доля классов без базы, какие vtbl?

Ilya Zviagin
Ну там каждый класс - COM объект, и с vtbl, смысл ...

Вообще, CComObject ее имеет, сейчас проверил как оно устроенно.

Ilya Zviagin
А, тогда я понял зачем там crtp

Да, там идея была какая: все мешанина из макросов и миксинов - миксины CRTP

Ilya Zviagin
А, тогда я понял зачем там crtp

Ну и плюс всякие штуки типа CComPtr, который просто смарт-поинтер.

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Crtp знаю, а что такое "передача политики класса" ...

Второе я полагаю это просто передача шаблонного класса в объект. Я почитал про миксины, и теперь ещё больше непонятно кто, что и зачем crtp VS просто передача шаблонного класса в конструктор как политики VS миксины (передача множества шаблонных классов и наследование от них как я понял)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта