Лучше посмотреть, как шибко умные не зная контекста будут изобретать велосипед там, где простое, понятное и эффективное решение пишется с ходу в пару строчек.
Здравствуйте, so5team, Вы писали:
S>Лучше посмотреть, как шибко умные не зная контекста будут изобретать велосипед там, где простое, понятное и эффективное решение пишется с ходу в пару строчек.
Ну так "шибко умные" это умеют, а у тебя, как раз, и знание контекста есть и тебе интересно, как без шаблонов сделать...
В частности есть такой вопрос по контексту, зачем вообще нужен result_t? Почему он сразу не вариант из удачного результата и неудачного?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, so5team, Вы писали:
S>Вы ошиблись, в приведенном примере нет сущностей с именем result_t.
Ну там у тебя много разных сущностей, и в вариантах ещё добавили. у тебя оно reply_t называлось.
Собственно вопрос чем reply от result отличается концептуально? И зачем их таки два разных?
E>> Почему он сразу не вариант из удачного результата и неудачного?
S>Там и есть вариант из удачного и неудачного. Вот прям так иностранными буквами и написано: std::variant<successful_result_t, failed_result_t>.
Там ещё много фсякого понаписано
Впрочем, как я понял, ты и так всё знаешь, к обсуждению не готов, так что зачем спрашивал у кого-то
Вы вместе с вашими матерыми C++ разработчиками вместо этого предлагаете что?
я не понимаю...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Собственно вопрос чем reply от result отличается концептуально? И зачем их таки два разных?
result -- это результат обработки данных, reply -- это контейнер для переноса этого результата из одного рабочего потока в другой, вместе с результатом переносится дополнительная информация.
E>Впрочем, как я понял
Это вряд ли.
E>так что зачем спрашивал у кого-то
Вы вместе с вашими матерыми C++ разработчиками вместо этого предлагаете что?
я не понимаю...
Да вот интересно посмотреть на решения от матерых программистов, застрявших в конце 1980-х. Но вряд ли доведется увидеть. Пока только пустые разговоры.
Здравствуйте, so5team, Вы писали:
S>Да вот интересно посмотреть на решения от матерых программистов, застрявших в конце 1980-х. Но вряд ли доведется увидеть. Пока только пустые разговоры.
Ну вы хамите побольше
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, smeeld, Вы писали:
S>Заметил, что у большинства практикующих C++ достаточно негативное отношение к шаблонам в CPP. Речь идёт не о использовании std или boost, которые состоят из таковых процентов на 80, а о написании кода с активным применением параметризации функций и типов. Это многими считается чуть ли не признаком недостатка квалификации, типа матёрый плюсовик всегда найдёт способ расписать без создания параметризованных типов, и вообще найдёт способ писать на C++ как можно проще. Это вообще что такое? Если принять это мнение за справедливое, то получается, что std и boost писали джуны несмышлённые и не знающие как просто писать на CPP?
да всё там нормально, нужно просто меру знать и не параметризировать всё подряд
у меня в коде шабюлоны тока в контейнерах , эвентах и обвертках над сложными типами для устранения постоянных кастов и всё, и этого достаотчное
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Erop, Вы писали:
S>>Да вот интересно посмотреть на решения от матерых программистов, застрявших в конце 1980-х. Но вряд ли доведется увидеть. Пока только пустые разговоры.
E>Ну вы хамите побольше
Для человека, который начинал с таким апломбом:
Это всего лишь означает, что ты не умеешь контролировать их "расползание" по коду...
и
Это, кстати, хорошее упражнение...Попробуешь сам?
у вас оказалась на удивление тонкая душевная организация.
А ведь результат разговора был предсказан точно: никакого кода. Только пустые разговоры вокруг стиля общения.
Это ведь вы когда-то рассказывали про мегабиблиотеку, которая многократно лучше STL, но которую никто не увидел и даже не узнал, на каких принципах она работает? Так что в вашем случае все предсказуемо.
Здравствуйте, Erop, Вы писали:
E>Там ещё много фсякого понаписано E>Впрочем, как я понял, ты и так всё знаешь, к обсуждению не готов, так что зачем спрашивал у кого-то
Вы вместе с вашими матерыми C++ разработчиками вместо этого предлагаете что?
я не понимаю...
если ты не готов предоставить код, который можно обсудить, то зачем было влезать?
Здравствуйте, AlexGin, Вы писали:
AG>Фичи языка — это твои друзья, а НЕ враги! AG>Кстати, открою тебе маленький секрет — применение конструкции if constexpr из набора C++17 — AG>позволяет работать с шаблонами удобнее, чем раньше!!! AG>Вот простой пример: AG>
AG>template <typename C>
AG>void print (const C &c)
AG>{
AG> if constexpr (std::is_same_v<C, std::vector<int>>) {
AG> cout << "vector<int>: ";
AG> }
AG> if constexpr (std::is_same_v<C, std::list<int>>) {
AG> cout << "list<int>: ";
AG> }
AG> if constexpr (std::is_same_v<C, std::deque<int>>) {
AG> cout << "deque<int>: ";
AG> }
AG> for (auto i : c)
AG> {
AG> cout << i << ", ";
AG> }
AG> cout << '\n';
AG>}
AG>
AG>Архитектура кода — только выигрывает от применения современных возможностей языков программирования. AG>Так, применение приведенного выше метода, позволит тебе забыть о трудно-понимаемом SFINAE
абсолютно синтетический пример, при этом а) все типы, которые ф-я поддерживают должны перечисляться внутри и б) std::vector<int, myalloc> уже не пройдет, я уже молчу про std::array
ну и я бы запилил такое на typeid::name и abi::__cxa_demangle (для gcc, clang)
Здравствуйте, chaotic-kotik, Вы писали:
CK>мой вариант он проигнорировал, так что, делаем выводы
А разве был какой-то вариант? Передача std::variant прямо в конструктор reply -- это так себе выбор. Поскольку хранение result-а именно в виде variant -- это, по сути, деталь реализации reply_t. Не есть хорошо, что эта деталь уже торчит наружу. Но прибивать к ней гвоздями еще и конструктор reply... Кому как, короче говоря.
CK>ну и этот пример нельзя считать advanced применением шаблонов, идиоматичный perfect forwarding, ничего страшного и непонятного
Этот пример достаточно компактен и понятен. Как раз то, что нужно для ленивого обсуждения на форуме. И то, даже аналог этого простого случая никто вменяемо не без шаблонов переписать не смог (ну нельзя же вот это
Можно было бы, конечно, какой-нибудь хардкор на публику вынести. Но тут ведь думать гораздо больше придется. В форумных войнах желание подумать у кого-нибудь -- это ну очень редкий зверь.
Здравствуйте, chaotic-kotik, Вы писали:
CK>абсолютно синтетический пример, при этом а) все типы, которые ф-я поддерживают должны перечисляться внутри
Это совсем не обязательно: просто не будет аннотации к типу, а основной цикл всё равно — работать будет.
CK>б) std::vector<int, myalloc> уже не пройдет, я уже молчу про std::array
Я деже не припомню, когда я такое последний раз применял
Ну и это можно дополнить, если так уж хочется.
CK>ну и я бы запилил такое на typeid::name и abi::__cxa_demangle (для gcc, clang)
Дело вкуса
P.S. Несмотря на то, что пример действительно носит оттенок "синтетики", он позволяет скептикам (типа ТС), немного приоткрыть для себя C++17.
Здравствуйте, chaotic-kotik, Вы писали:
NB>>если ты не готов предоставить код, который можно обсудить, то зачем было влезать? CK>мой вариант он проигнорировал, так что, делаем выводы
и чем замена ссылки на вариант лучше исходного кода? (кроме добавления лишнего мува)
Здравствуйте, smeeld, Вы писали:
S>Я то как раз за, если случается писать на С++ то ухожу в шаблоны сразу, без них код на С++ нелаконичен и убог, откровенно говоря. В треде упоминались те, кто против, кто желает писать на C++ как на Си, так как писать на С++ без шаблонов-это и означает писать на Си. Кстати, многие из противников в треде уже отметились, почитайте их доводы против параметризации и обобщений, типа это выпендрёшь м нечитабельно.
Подобное со стороны любителей Джавы можно услышать. Мол, почему вы вместо того, чтобы делом заниматься, пишете адаптеры абстрактных фабрик для декорации билдеров стратегий? А они тебе: да ты просто не осилил, так получается всё гибко и идиоматично.
Есть такой мужик, Erin Catto. Он создал самый популярный в мире движок 2D-физики. На С++. Чтобы создать качественную симуляцию, надо разбираться в том, как организовать детект коллизий, солвер контактов и констрейнтов, вычислительно устойчивую интеграцию, etc. Можно ли его назвать неквалифицированным программистом? А между тем там не то что шаблонов, там даже RAII толком нет, голый Си с классами и прости господи сырыми указателями, плюс-минус использование std::vector'а какого-нибудь. Зато движок легко читать и понимать, и можно не приходя в сознание портировать на любой JavaScript.
Box2D is designed to be portable, so I try to keep the C++ usage simple. Also, I don't use the STL (except sort) or other libraries to keep the dependencies low. I keep template usage low and don't use name spaces. Remember, just because a C++ feature exists, that doesn't mean you need to use it.
The many ports of Box2D to other languages platforms shows that this strategy has been successful.
Писать с шаблонами любой горазд; я когда на C++ программировал, любил это делать. Но положа руку на сердце: если надо быстро въехать в кодобазу, гораздо приятнее, если там логика написана на if'ах, а не на std::enable_if'ах.
Здравствуйте, so5team, Вы писали:
S>Этот пример достаточно компактен и понятен. Как раз то, что нужно для ленивого обсуждения на форуме. И то, даже аналог этого простого случая никто вменяемо не без шаблонов переписать не смог (ну нельзя же вот это
Здравствуйте, Qbit86, Вы писали:
Q>Есть такой мужик, Erin Catto. Он создал самый популярный в мире движок 2D-физики...
Как-то вы издалека зашли. Нужно было бы сразу с Линуса Торвальдса, который еще в начале 90-х выбрал чистый C вместо C++ для своего ядра. Судя по успеху результата, выбор был более чем оправданным.
Здравствуйте, so5team, Вы писали:
A>>Эттто почему?
S>Потому что это троллинг. Причем троллинг так себе. Как и шутки, впрочем.
Эк тебя корёжит!
Это не тролинг.
Давай рассказывай, почему в данном случае нельзя обойтись одним битом вместо всех наворотов.
PS.
Не, я всё понимаю.
Потому что автор первоначального кода на шаблонах будет выглядеть извращенцем.
Но мы же на rsdn, поэтому давай, попытайся придумать технический, а не психический ответ.