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

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

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

30 ответов

26 просмотров

В 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 миксины (передача множества шаблонных классов и наследование от них как я понял)

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта