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

Здравствуйте товарищи, хотел бы задать вопрос по CRTP. Статьи на

хабре я почитал, в чем его преимущества для расширения функциональности, мне понятно. Enable_shared_from_this наглядный пример. Тем не менее, его также частенько упоминают, как замену шаблонному методу, без динамического полиморфизма, но более быструю. Но по сути, в этой ситуации точно такого же поведения можно добиться композицией. И я не вижу никакого преимущества CRTP перед вариантом с композицией, кроме того, что из-за композиции класс раздует из-за байтового выравнивания. Если мы гонимся за до фига быстрым шаблонным методом, то зачем нам CRTP нужен? Почему так лучше, чем просто композицию использовать?

1 ответов

12 просмотров

CRTP нужен для статического полиморфизма, чтобы в базе описать инварианты. Но вообще он не очень то часто нужен, проще эти инварианты писать внешними функциями с диспетчеризацией по типам.

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

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

https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Ребят в СИ можно реализовать ООП?
Николай
33
Доброго вечера. Поскажите, как изменить код number_fomat, что цена была без копеек. <?php if(!empty($value)) { $parts = explode('.',$value); echo number_format ($part...
Katerina Beliayeva
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Решил тут попробовать embassy на bluepill. Все установил, собрал blink и успешно залил с помощью St link 2 китайского. Но после этого чип шиться перестал. На форумах прочел, ч...
Lukutin R2AJP
6
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
Карта сайта