@ProCxx

Страница 2289 из 2477
John
20.08.2018
11:23:22
Дескать несколько опций задавать, setFlags(C1 | C2)

Uiiuviiw
20.08.2018
11:29:03
Прошу прощения! Не для констант, а для флагов.

Дескать несколько опций задавать, setFlags(C1 | C2)
Про маски не понял. А почему нельзя с другими степенями?

Google
Alexander
20.08.2018
11:32:00
Про маски не понял. А почему нельзя с другими степенями?
ты знаешь, как выглядит целое число в двоичном виде?

Uiiuviiw
20.08.2018
11:32:43
Я вообще себе слабо представляю биты и все такое..

Spoonson
20.08.2018
11:32:51
ну так время представить

Uiiuviiw
20.08.2018
11:33:38
А может просто дать ответ на вопрос и я уже потом сам буду представлять?

Меня только интересует конкретно, это только степень двойки при сложении не может повторить результат?

ты знаешь, как выглядит целое число в двоичном виде?
А вы знаете? Можете на мойпоследний вопрос ответить?

Xessao
20.08.2018
11:37:06
Меня только интересует конкретно, это только степень двойки при сложении не может повторить результат?
Начни с википедии. Я к тому, что никто не хочет повторять слова, которые написаны 20 лет назад.

Alexander
20.08.2018
11:37:12
Дальнейшее обсуждение сего вопроса здесь будет вытираться

У нас есть чат для таких вопросов - я тебя туда перенаправил, так как считаю, что тот чат более уместен для таких вопросов

Matwey
20.08.2018
15:08:55
Куда потечет?

Yarique
20.08.2018
15:11:29
Нельзя в лямбду захватывать shared_ptr - память же потечет.
Как функциональный объект пройдёт деструкцию - счётчик ссылок уменьшается. Всё норм

Google
Yarique
20.08.2018
15:14:17
shared_from_this создает новый shared_ptr, увеличивая счётчик ссылок, потом возвращает новый shared_ptr, лямбда из возвращённого rvalue захватывает перемещением shared_ptr Все нормально

Это то же самое что объект template <class SelfType> struct Lambda { std::shared_ptr<SelfType> self; template<class T> void operator()(T &&param) { self->method(param); } }; Не?

Если бы у лямбды ещё mutable было

Nik
20.08.2018
15:29:50
Как функциональный объект пройдёт деструкцию - счётчик ссылок уменьшается. Всё норм
Это очень хрупкий момент. Очень легко его проморгать и наступить на граблю. Rule of thumb - не делать так никогда

Yarique
20.08.2018
15:32:31
Не вижу там ничего хрупкого

Nik
20.08.2018
15:39:07
А зря. Очень легко сделать циклическую зависимость. Не сегодня, дак через месяц при рефакторинге/редизайне. Причем зависимость может быть очень нетривиальной - через цепочку 3-5 объектов. После нескольких подобных инцидентов мы ввели жесткое правило - в лямбду только weak_ptr

Constantine
20.08.2018
15:57:32
Когда условное SomeWindow выставляет обработчик своему компоненту, там нет ни shared, ни weak

Oleg
20.08.2018
16:50:50
Привет, плюсачик

А dynamic_poiner_cast работает только при прямом наследовании?

struct А : B, C из B - C получить нельзя же?

Assasin
20.08.2018
16:53:40
Если правильно помню, правила те же, что с dynamic_cast должны быть

Oleg
20.08.2018
17:01:38
да, там просто так не получится кастануть. Нужно через наследника идти

Andrey
20.08.2018
17:23:15
struct А : B, C из B - C получить нельзя же?
Можно, так работать будет: #include <iostream> #include <memory> struct B { virtual ~B() {} }; struct C { virtual ~C() {} }; struct A : B, C {}; void test(std::shared_ptr<B> ptr) { if (std::dynamic_pointer_cast<C>(ptr)) std::cout << "yes\n"; else std::cout << "no\n"; } int main() { test(std::make_shared<A>()); }

Oleg
20.08.2018
17:26:17
Я больше склоняюсь к ошибке в дизайне

Constantine
20.08.2018
17:29:30
+++, множественное наследование это почти всегда ошибка в дизайне

Oleg
20.08.2018
17:30:49
Нет, множественное - это норм

Google
Oleg
20.08.2018
17:31:17
А вот у меня, видимо, не нужнотисполтзовать интерфейс в этом месте

Constantine
20.08.2018
17:35:31
Oleg
20.08.2018
17:37:02
Люди поколеченные джавой - спокойнее

Ignat
20.08.2018
17:37:26
норм наброс

Egor
20.08.2018
17:37:51
Next time somebody tells you that you should never use multiple inheritance, look them straight in the eye and say, “One size does not fit all.”

https://isocpp.org/wiki/faq/multiple-inheritance#mi-not-evil

Constantine
20.08.2018
17:40:02
Люди поколеченные джавой - спокойнее
Это не аргумент. И я программирую только на C++ и ни на чем, кроме C++

Anton
20.08.2018
17:41:58
Пруф или не было
Интерфейсы?

Oleg
20.08.2018
17:42:10
Любая технология ок, если можешь ее использовать правильно

Nik
20.08.2018
17:42:27
CRTP

Constantine
20.08.2018
17:49:50
Любая технология ок, если можешь ее использовать правильно
Так я и задаю вопрос хотя бы одном случае, когда её использование правильно (и не является костылем^W метафорой языка)

Под последним я понимаю случаи вроде enable_shared_from_this и binary_function, давайте их не рассматривать

Синтаксис C++ содержит метки и goto, но что-то желание их использовать в C++ особо не возникает

Oleg
20.08.2018
17:53:15
При чем тут твое желание? Нет ничего плохого в готу, если ты их грамотно используешь

Александр
20.08.2018
17:53:18
Я тут мимо проходил, очень боюсь влезать в холивары и тратить на них время, но всё же выскажу своё мнение. Множественное наследование - замена композиции, пока не завезли перегрузку operator.. Просто чтобы было меньше кода

Anton
20.08.2018
17:54:20
Так чем реализация многих интерфейсов или составление нового интерфейса из базовых не является корректным использованием?

Oleg
20.08.2018
17:55:28
Нет, но не потому что не хочу, а потому что нет необходимости. А вот в наследовании есть необходимость и его использую. И в синглтонах есть и их использую и клал я болт на всех этих академичечких программистов, которые рассказывают мне, как писать проекты

Google
Побитый
20.08.2018
17:56:35
Так чем реализация многих интерфейсов или составление нового интерфейса из базовых не является корректным использованием?

Constantine
20.08.2018
17:56:47
Это не пример, это какое-то абстрактное рассуждение

Oleg
20.08.2018
17:56:49
Ну я как минимум привел два костыля, когда множественное наследование подпирает другие дефекты
Ооп описывает объекты. Сложные объекты могут иметь свойства разных объектов - множественное наследование сюда отлично вписывается

Ignat
20.08.2018
17:57:27
иметь свойства == имплементить интерфейсы

Constantine
20.08.2018
17:57:28
Использование goto замечательно позволяет переходить к обработчику ошибок и унифицированному возврату (см. язык С)

Oleg
20.08.2018
17:58:28
иметь свойства == имплементить интерфейсы
И чем это не множественное наследование?

Constantine
20.08.2018
17:58:57
Использование goto замечательно позволяет переходить к обработчику ошибок и унифицированному возврату (см. язык С)
Господа, требование примера возникает не просто так. Вы пользуетесь goto по этой причине? Думаю, нет

Побитый
20.08.2018
17:59:43
Александр
20.08.2018
17:59:44
я видать что-то пропустил, а когда будет operator . и для чего он нужен?
да были тут пропозалы от умных людей, чтобы можно было делать удобные прокси объекты, всякие там property средствами языка реализовывать и так далее. аналог перегрузки operator->, только точку. пишешь так foo.bar, а тебе какая-нибудь другая штука возвращается на самом деле

Александр
20.08.2018
18:00:40
Ignat
20.08.2018
18:00:51
И чем это не множественное наследование?
есть существенная разница между наследованием интерфейса и имплементации

Александр
20.08.2018
18:00:57
проперти есть в msvc диалекте :)))
знаем, юзали, очень приятная вещь. хотя это ещё один повод для холивара

Ignat
20.08.2018
18:01:04
чем-то плохим иногда считают второе

Constantine
20.08.2018
18:01:18
знаем, юзали, очень приятная вещь. хотя это ещё один повод для холивара
аналогично - юзал, получаются очень симпотишные конструкции иногда

Vitaly
20.08.2018
18:01:38
При чем тут твое желание? Нет ничего плохого в готу, если ты их грамотно используешь
Оператор goto в C++ - это антипаттерн. В хорошем коде этого быть не должно.

Александр
20.08.2018
18:02:07
аналогично - юзал, получаются очень симпотишные конструкции иногда
правда столкнулся с проблемой, что нельзя в геттер/сеттер сунуть инстанцирование шаблонного метода, но это другая история

Constantine
20.08.2018
18:02:09
Оператор goto в C++ - это антипаттерн. В хорошем коде этого быть не должно.
Угу. Я на этом примере пытаюсь объяснить, что в абстрактных рассуждениях выявлять ошибки очень сложно

Google
Oleg
20.08.2018
18:02:22
есть существенная разница между наследованием интерфейса и имплементации
Так никто не говорил про наследование имплементаций. Простотобсужжается множественное наследование

Vitaly
20.08.2018
18:02:40
Угу. Я на этом примере пытаюсь объяснить, что в абстрактных рассуждениях выявлять ошибки очень сложно
Разумеется. Отладка кода с кучей goto (например ядро Linux) - это всегда боль.

Oleg
20.08.2018
18:03:11
Оператор goto в C++ - это антипаттерн. В хорошем коде этого быть не должно.
Хороший код должен быть понятен. Если готу не уменьшает читабельности и понятдивости кода - не вижу проблес

Vitaly
20.08.2018
18:03:40
Хороший код должен быть понятен. Если готу не уменьшает читабельности и понятдивости кода - не вижу проблес
В хорошей компании код на C++ с goto не пройдёт review и тебя заставят его переписать.

Constantine
20.08.2018
18:03:52
Разумеется. Отладка кода с кучей goto (например ядро Linux) - это всегда боль.
Угу. Видимо, логика типа ФП внезапно улучшает читаемость кода (если не доводить до абсурда)

Между тем, "использование goto замечательно позволяет переходить к обработчику ошибок и унифицированному возврату (см. язык С)"

Абстрактное рассуждение, с которым очень сложно работать

Oleg
20.08.2018
18:05:17
Угу. Видимо, логика типа ФП внезапно улучшает читаемость кода (если не доводить до абсурда)
Фп очень положительно влияет на код, если пишешь какие-то матано вычисления

Александр
20.08.2018
18:05:48
Vitaly
20.08.2018
18:07:10
Linux не в счёт?
Linux - это голый Си. Речь о C++. В Си использование goto как раз уместно.

Constantine
20.08.2018
18:08:29
неа: https://godbolt.org/z/_7VSB9
и static_cast не встает, грустно

ofee
20.08.2018
18:09:04
Не понимаю спора. Каждому инструменту – своё применение. И у goto оно тоже имеется, пусть и во всё меньшем количестве. Но идеалогическая ненависть безотносительно к конкретному случаю – плохо

Matthew
20.08.2018
18:09:14
Ну вот есть break, return и throw как варианты перехода "к нужному месту". Какие сценарии goto не покрывает?

Страница 2289 из 2477