Size: a a a

2020 September 29

AD

Apache DOG™ in pro.cxx
Nik Vzdornov
Я понял о чем Вы, но тот же спринг с его di разрывает хэлоу ворлд до мегабайтов, да все удобно и на автомате, но возможна цена с которой трудно смириться.
увы спринг == адские костыли потому что это распрекрасная джава в которой всё нельзя
источник

AD

Apache DOG™ in pro.cxx
Pavel Samolysov
::tuple<std::vector<CCircle>, std::vector<CRect>> xxx; и затем auto get<CRect>(id); Тут разве нигде не вариант?
Но это не означает что нельзя взять шаблоны и нарисовать код который будет генерировать вот это вот:
источник

PS

Pavel Samolysov in pro.cxx
Гласси Hudobin
Вектор для примера. Если, скажем, тебе в классе нужны 1) опции, 2) логгер, 3) дб-коннекшн, то ты точно так же все три засовываешь в одну туплю и счастлив.
Это не по мотивам вот этого доклада https://www.youtube.com/watch?v=yy8jQgmhbAU&t=1515s ? Я правда не понял как здесь get<Предок> сработает? Указателей же нет, будет ссылку возвращать и мы вызовем методы на ссылке?
источник

ГH

Гласси Hudobin in pro.cxx
Речь про DOD, но не помню этот доклад. "Предок" что означает? Нет же наследования.
источник

Ц

Це Габелла in pro.cxx
Переслано от Це Габелла
Слышите
источник

Ц

Це Габелла in pro.cxx
Переслано от Це Габелла
Парни как на плюсах написать
источник

Ц

Це Габелла in pro.cxx
Переслано от Це Габелла
Прогу чтобы выводились ласт буквы строчки
источник

Ц

Це Габелла in pro.cxx
Переслано от Це Габелла
Написал для первых, но для последних что-то служно
источник

ГH

Гласси Hudobin in pro.cxx
Це Габелла
Переслано от Це Габелла
Написал для первых, но для последних что-то служно
for(auto it = str.rbegin();....)
источник

PS

Pavel Samolysov in pro.cxx
Гласси Hudobin
Речь про DOD, но не помню этот доклад. "Предок" что означает? Нет же наследования.
затем auto get<CRect>(id);  вот это смутило. Там же вектор лежит, разве гет так сможет?
источник

PS

Pavel Samolysov in pro.cxx
разве не так будет get<vector<CRect>>[id]?
источник

ГH

Гласси Hudobin in pro.cxx
Pavel Samolysov
разве не так будет get<vector<CRect>>[id]?
в теле шаблонной функции get пишется std::get<std::vector<T>> (...).
источник

AD

Apache DOG™ in pro.cxx
Це Габелла
Переслано от Це Габелла
Написал для первых, но для последних что-то служно
источник

Ц

Це Габелла in pro.cxx
???
источник

PS

Pavel Samolysov in pro.cxx
Гласси Hudobin
в теле шаблонной функции get пишется std::get<std::vector<T>> (...).
А ну да, std::get<std::vector<CRect>>(..)[...]
источник

ПК

Побитый Кирпич... in pro.cxx
Гласси Hudobin
И вовсе не страдать.
То есть, вместо class CCircle: public CShape, class CRect: public CShape и std::vector<std::shared_ptr<CShape>> делают
std::tuple<std::vector<CCircle>, std::vector<CRect>> xxx; и затем auto get<CRect>(id);
Все то же самое, но без использования кучи.
Не то же самое. Тут множество типов фиксированно и нерасширяемо извне. Аналог дин. полиморфизма на наследовании - type erasure и/или стат. полиморфизм на шаблонах
источник

PS

Pavel Samolysov in pro.cxx
Побитый Кирпич
Не то же самое. Тут множество типов фиксированно и нерасширяемо извне. Аналог дин. полиморфизма на наследовании - type erasure и/или стат. полиморфизм на шаблонах
С вариантом та же проблема - нужно заранее знать весь набор используемых типов. Для расширяемости придумали std::any (как раз type erasure), но, насколько помню, там нужна лишняя аллокация, да и присвоить такому any можно что угодно.
источник

ПК

Побитый Кирпич... in pro.cxx
Pavel Samolysov
С вариантом та же проблема - нужно заранее знать весь набор используемых типов. Для расширяемости придумали std::any (как раз type erasure), но, насколько помню, там нужна лишняя аллокация, да и присвоить такому any можно что угодно.
any это type erasure для CopyConstructible, но мы можем te для своего концепта запилить. А то что аллокация, то для полиморфизма динамического на наследовании тоже используется дин. аллокация, так что можно вынести ее за скобки
источник

PS

Pavel Samolysov in pro.cxx
Да, то что аллокация здесь наверное не самая большая проблема. А пример хорош как раз для случаев, когда заранее известен набор типов данных и не хочется размениваться на лишнюю индирекцию при работе с ними через указатели/ссылки/virtual ради динамического полиморфизма, который здесь не особо нужен/полезен. Если добавится еще какой-нибудь CTriangle, то конечно этот код придется переписывать. Но если вероятность появления CTriangle невысока, а быстродействие очень важно, то такой подход имеет право на жизнь
источник

m

magras in pro.cxx
Pavel Samolysov
Да, то что аллокация здесь наверное не самая большая проблема. А пример хорош как раз для случаев, когда заранее известен набор типов данных и не хочется размениваться на лишнюю индирекцию при работе с ними через указатели/ссылки/virtual ради динамического полиморфизма, который здесь не особо нужен/полезен. Если добавится еще какой-нибудь CTriangle, то конечно этот код придется переписывать. Но если вероятность появления CTriangle невысока, а быстродействие очень важно, то такой подход имеет право на жизнь
Type erasure точно так же потребует применения динамического полиморфизма. Просто он будет спрятан в реализации type erasure.
источник