Size: a a a

2020 November 25

АР

Андрей Руссков... in pro.cxx
"проще" разве что за счет объема
источник

АР

Андрей Руссков... in pro.cxx
а то бывает намешают шаблонной магии с виртуальными классами и читаешь код словно впервые в жизни плюсы видишь...
источник

NP

Nikita Petrenko in pro.cxx
хотя, кстати, с помощью crtp можно делать что-то прямо очень похожее на интерфейсы. Только это конечно не так удобно, как если б это было встроено в язык в виде трейтов, и из коробки сочеталось бы с динамическим полиформизмом (привет, rust)
источник

АР

Андрей Руссков... in pro.cxx
мой самый нелюбимый прием
источник

АР

Андрей Руссков... in pro.cxx
навигацию по коду в IDE убивает просто напрочь
источник

NP

Nikita Petrenko in pro.cxx
ну он становится не таким нелюбимым, если вся кодовая база в нём) а ide, да, очень радуется когда такой код видит
источник

S

Stas in pro.cxx
Nikita Petrenko
хотя, кстати, с помощью crtp можно делать что-то прямо очень похожее на интерфейсы. Только это конечно не так удобно, как если б это было встроено в язык в виде трейтов, и из коробки сочеталось бы с динамическим полиформизмом (привет, rust)
Это не интерфейсы. Начнём с этого.
источник

NP

Nikita Petrenko in pro.cxx
почему не интерфейсы?
источник

NP

Nikita Petrenko in pro.cxx
там же явно перечислены методы интерфейса + все имплементации явно декларируют, что имплементят этот "интерфейс"
источник

A

Andrei Konshyn in pro.cxx
Stas
Это не интерфейсы. Начнём с этого.
crtp можно  использовать и как статический полиморфизм (интерфейс), и как extended abilities.
но очень согласен @Antervis , не перевариваю эту штуку
источник

m

magras in pro.cxx
Андрей Руссков
мой самый нелюбимый прием
crtp это еще нормально. Вот когда применяют template method pattern, я начинаю задумываться о покупке чего-нибудь огнестрельного.
источник

S

Stas in pro.cxx
Nikita Petrenko
там же явно перечислены методы интерфейса + все имплементации явно декларируют, что имплементят этот "интерфейс"
Не могу аргументировать свою сторону на текущий момент.
источник

D

Danya in pro.cxx
magras
crtp это еще нормально. Вот когда применяют template method pattern, я начинаю задумываться о покупке чего-нибудь огнестрельного.
А он в С++ как-то особенно выглядит? Просто для меня это нормальный паттерн для условной джавы:
class Base {
 protected abstract void polymorphicLogic();

 public void complexLogic() {
   ...
   polymorphicLogic();
   ...
 }
}

class Derived extends Base {
 protected void polymorphicLogic() {
   ...
 }
}

Но если мы про одно и то же, то что плохого в этом?
источник

PK

Pavel Kazakov in pro.cxx
Nikita Petrenko
хотя, кстати, с помощью crtp можно делать что-то прямо очень похожее на интерфейсы. Только это конечно не так удобно, как если б это было встроено в язык в виде трейтов, и из коробки сочеталось бы с динамическим полиформизмом (привет, rust)
трейт — вещь в себе, на плюсах их нельзя сделать, это просто интерфейсы, оторванные от всего, они как бы парят в вакууме
источник

m

magras in pro.cxx
Danya
А он в С++ как-то особенно выглядит? Просто для меня это нормальный паттерн для условной джавы:
class Base {
 protected abstract void polymorphicLogic();

 public void complexLogic() {
   ...
   polymorphicLogic();
   ...
 }
}

class Derived extends Base {
 protected void polymorphicLogic() {
   ...
 }
}

Но если мы про одно и то же, то что плохого в этом?
Да, это оно. Плохо то, что для того чтобы прочитать такой метод надо облазить всю иерархию классов и собрать его по кускам.
источник

АР

Андрей Руссков... in pro.cxx
Pavel Kazakov
трейт — вещь в себе, на плюсах их нельзя сделать, это просто интерфейсы, оторванные от всего, они как бы парят в вакууме
concept + static_assert на соответствие типа этому концепту
источник

NP

Nikita Petrenko in pro.cxx
Pavel Kazakov
трейт — вещь в себе, на плюсах их нельзя сделать, это просто интерфейсы, оторванные от всего, они как бы парят в вакууме
в плюсах есть трейты — например, std::hash является трейтом
источник

PK

Pavel Kazakov in pro.cxx
Андрей Руссков
concept + static_assert на соответствие типа этому концепту
ну это не то, это троллейбус из буханки хлеба, а не first class citizen в языке
источник

АР

Андрей Руссков... in pro.cxx
ну либо через спецификацию шаблона
источник

PK

Pavel Kazakov in pro.cxx
Nikita Petrenko
в плюсах есть трейты — например, std::hash является трейтом
хэш — костыль)
источник