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

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

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
А может просто дать ответ на вопрос и я уже потом сам буду представлять?
Меня только интересует конкретно, это только степень двойки при сложении не может повторить результат?

Alexander
20.08.2018
11:36:54

Xessao
20.08.2018
11:37:06

Alexander
20.08.2018
11:37:12
Дальнейшее обсуждение сего вопроса здесь будет вытираться
У нас есть чат для таких вопросов - я тебя туда перенаправил, так как считаю, что тот чат более уместен для таких вопросов

Nik
20.08.2018
15:08:16

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

Yarique
20.08.2018
15:11:29

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 &¶m)
{
self->method(param);
}
};
Не?
Если бы у лямбды ещё mutable было

Nik
20.08.2018
15:29:50

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

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

Yarique
20.08.2018
15:40:25
Но это уже не про хрупкое, а про детали использования shared_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

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
Под последним я понимаю случаи вроде enable_shared_from_this и binary_function, давайте их не рассматривать
Синтаксис C++ содержит метки и goto, но что-то желание их использовать в C++ особо не возникает

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

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

Constantine
20.08.2018
17:53:36

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

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

Constantine
20.08.2018
17:56:05

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 замечательно позволяет переходить к обработчику ошибок и унифицированному возврату (см. язык С)

Igor
20.08.2018
17:58:20

Oleg
20.08.2018
17:58:28

Constantine
20.08.2018
17:58:57

Побитый
20.08.2018
17:59:43

Александр
20.08.2018
17:59:44

Constantine
20.08.2018
17:59:58

Александр
20.08.2018
18:00:40

Ignat
20.08.2018
18:00:51

Александр
20.08.2018
18:00:57

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

Constantine
20.08.2018
18:01:18

Vitaly
20.08.2018
18:01:38

Александр
20.08.2018
18:02:07

Constantine
20.08.2018
18:02:09

Google

Oleg
20.08.2018
18:02:22

Constantine
20.08.2018
18:02:40

Vitaly
20.08.2018
18:02:40

Oleg
20.08.2018
18:03:11

Vitaly
20.08.2018
18:03:40

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

Oleg
20.08.2018
18:05:17

Александр
20.08.2018
18:05:48

ofee
20.08.2018
18:06:37

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

Constantine
20.08.2018
18:08:29

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

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