том и в том случае ты не можешь итерироваться по реализациям как по общим в иерархии классам ?
В CRTP в методе base можно сделать так static_cast<derived*>(this)->some_method();
CRTP позволяет подмешивать какой-то свой бойлерплейт в пользовательские классы, завязанный на типы пользовательских же классов. В остальных случаях лучше принимать полиси класс
mixin для бедных
В старые времена, Microsoft обожало использовать этот прием, чтобы обходиться без vtbl (ATL, WTL)
Вы имеете ввиду что отнаследованый класс, если включен в пользовательский класс имеет признаки базового ? А в чем разница если я возьму базовый, параметризованный полиси классом и включающий его и буду его использовать ?
Я в курсе. Вопрос в том, почему не полиси
Почему отказались, и что стало альтернативой ?
Трейта ничего не знает ни о природе базового класса, ни о природе потомка в общем случае и все равно может делать что-то полезное.
.Net, в ATL ничего не поменялось в общем.
а ты полиси видел?
В общем вот так: D:B<D> это CRTP. D d; сделать в B не получится (что такое D? оно не определено в этот момент) сделать D* d; Можно как и каст выше.
Я имею ввиду, что можно написать какую-нибудь сложную многословную шаблонную функцию, завязанную на тип наследника в базовом классе, чтобы не писать её в каждом наследнике
Crtp знаю, а что такое "передача политики класса" - нет
В ATL-то и без vtbl ?
Он не говорил, что отказались
Да, хотя давно туда не заглядывал, раньше они обходились статическим полиморфизмом.
Ole весь на vtbl, там без него не бывает
Ну это одно и то же
OLE частный случай COM
А COM - частый случай OLE
Имел ввиду только классы ATL а не COM вообще, если что.
Ну там каждый класс - COM объект, и с vtbl, смысл там от него (vtbl) избавляться?
в ATL львиная доля классов без базы, какие vtbl?
А, тогда я понял зачем там crtp
Вообще, CComObject ее имеет, сейчас проверил как оно устроенно.
Да, там идея была какая: все мешанина из макросов и миксинов - миксины CRTP
Ну и плюс всякие штуки типа CComPtr, который просто смарт-поинтер.
Второе я полагаю это просто передача шаблонного класса в объект. Я почитал про миксины, и теперь ещё больше непонятно кто, что и зачем crtp VS просто передача шаблонного класса в конструктор как политики VS миксины (передача множества шаблонных классов и наследование от них как я понял)
Обсуждают сегодня