Russian Qt Forum
Ноябрь 22, 2024, 10:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6 7 ... 9   Вниз
  Печать  
Автор Тема: C++ Object Token Library  (Прочитано 58865 раз)
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #60 : Февраль 10, 2020, 13:32 »

Я и не сомневался. Но там и другие требования есть. Например:
Один Engine можно установить только в один Car. Установка одного и того же Engine в несколько разных Car недопустима.

Как его соблюдать предлагаете?

Код:
class BMW: public Car
{
    BMW() { this->setEngine<BMW_Engine>(); }
};

ты никак не сможешь засунуть один и тот же двигатель в две машинки,
просто потому что класс машинки не даст тебе этого сделать.

это называется "инкапсуляция".



Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #61 : Февраль 10, 2020, 13:35 »

Код:
class BMW: public Car
{
    BMW() { this->setEngine<BMW_Engine>(); }
};

ты никак не сможешь засунуть один и тот же двигатель в две машинки,
просто потому что класс машинки не даст тебе этого сделать.

это называется "инкапсуляция".

Двигатель в BMW заменить на другой нельзя? Это как называется? Улыбающийся

И здесь this->setEngine<BMW_Engine>() откуда двигатель берётся?
« Последнее редактирование: Февраль 10, 2020, 13:55 от ViTech » Записан

Пока сам не сделаешь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #62 : Февраль 10, 2020, 14:20 »

Двигатель в BMW заменить на другой нельзя? Это как называется? Улыбающийся

я называю это "практичность"
нех лазить куда не надо.

хочешь двигатель от мерседеса - возьми мерседес.


ежели очень надо отхватить гемморой  сделать иньекцию зависимостей,
тогда вытащи в паблик метод setEngine<type of engine>(params...);

И здесь this->setEngine<BMW_Engine>() откуда двигатель берётся?

по месту (emplace) конструируется.
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #63 : Февраль 10, 2020, 14:34 »

я называю это "практичность"
нех лазить куда не надо.

хочешь двигатель от мерседеса - возьми мерседес.

А если просто двигатель помощнее нужно установить взамен существующего? Или он сломался. Менять авто целиком? Очень практично Улыбающийся.

по месту (emplace) конструируется.

Это простой пример с минимумом классов, чтобы не засорять его несущественными для него деталями. В реальном приложении Car будет знать только об интерфейсе Engine, и функциональность по созданию двигателя в авто может быть избыточной или вообще невозможной.

Вы начинаете какие-то свои задачи придумывать и их решать. Вот эту конкретную с указанными требованиями можете решить? Впрочем, можете опять спросить: "А зачем это всё нужно?" Улыбающийся.
Записан

Пока сам не сделаешь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #64 : Февраль 10, 2020, 15:12 »

А если просто двигатель помощнее нужно установить взамен существующего? Или он сломался. Менять авто целиком? Очень практично Улыбающийся.

да. это - очень практично.
такое впечатление, что ты проецируешь двигатель из реального мира на программную абстракцию.

сломался двигатель?
ну так почини его.

менять сам объект для этого не нужно.

Код:
void clear_input()
{
    std::wcin.clear(),
    std::wcin.ignore(std::numeric_limits<std::streamsize>::max(), L'\n');

    assert(std::wcin);  // <--- и о боже! наш двигатель снова работает!
}

на практике, от иньекций зависимостей больше головняков, чем пользы.


В реальном приложении Car будет знать только об интерфейсе Engine,
и функциональность по созданию двигателя в авто может быть избыточной или вообще невозможной.

а! я понял.
ты просто не понимаешь, как работает emplace.
если хочешь, я тебе подробно расспишу как правильно готовят это блюдо.

если вкратце,
Car не нужно ничего знать ни о каких наследниках Engine
это никак не мешает сконструировать двигатель по месту.

Вы начинаете какие-то свои задачи придумывать и их решать. Вот эту конкретную с указанными требованиями можете решить? Впрочем, можете опять спросить: "А зачем это всё нужно?" Улыбающийся.

вот это поворот.

ты хотел машинку с кучкой мониторов, и 1 нерасшариваемым двигателем.
ты её получил.

ну и чего тебе не нравится?
« Последнее редактирование: Февраль 10, 2020, 15:32 от _Bers » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #65 : Февраль 10, 2020, 15:35 »

Вы начинаете какие-то свои задачи придумывать и их решать. Вот эту конкретную с указанными требованиями можете решить? Впрочем, можете опять спросить: "А зачем это всё нужно?" Улыбающийся.

вот это поворот.

ты хотел машинку с кучкой мониторов, и 1 нерасшариваемым двигателем.
ты её получил.

ну и чего тебе не нравится?

...

Ну и зачем потёрли свою сентенцию о том, что мои токены оказались на хрен не нужны? Улыбающийся Так я вам об этом сразу сказал. Решайте свои задачи, у меня другие.
Записан

Пока сам не сделаешь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #66 : Февраль 10, 2020, 15:43 »

Ну и зачем потёрли свою сентенцию о том, что мои токены оказались на хрен не нужны? Улыбающийся Так я вам об этом сразу сказал. Решайте свои задачи, у меня другие.

решил, что излишняя эмоциональность не нужна.

у меня такое впечатление сложилось,
что ты занимаешься не задачами, а философией.

« Последнее редактирование: Февраль 10, 2020, 15:46 от _Bers » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #67 : Февраль 10, 2020, 15:54 »

у меня такое впечатление сложилось,
что ты занимаешься не задачами, а философией.

Философией тоже кто-то заниматься должен. Вот есть уже два варианта решения задачи. Я вашим пользоваться точно не буду. А вы моим. Другие участники форума сами для себя решат, какое решение им ближе, и нужны ли им такие токены. Улыбающийся
Записан

Пока сам не сделаешь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #68 : Февраль 10, 2020, 16:06 »

Я вашим пользоваться точно не буду

если ты про emplace, то это не мой способ.
эта техника сегодня применяется повсеместно.

Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #69 : Февраль 10, 2020, 16:17 »

если ты про emplace, то это не мой способ.
эта техника сегодня применяется повсеместно.

Типа такого?
Записан

Пока сам не сделаешь...
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #70 : Февраль 10, 2020, 16:37 »

если ты про emplace, то это не мой способ.
эта техника сегодня применяется повсеместно.

Типа такого?


ага
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #71 : Февраль 10, 2020, 16:53 »


Тогда в конструкторе SomeCar (даже когда он в cpp файле находится) должен быть доступен конкретный тип SomeEngine. Такая зависимость может быть нежелательна или невозможна.
Записан

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #72 : Февраль 10, 2020, 17:37 »

Ну ладно, реализовал Car (аттач) как я понял задачу. Никакого применения вумным указателям я тут не вижу. Воткнул один юник, но чисто для понту, и без него можно спокойно обойтись.

Замечу что копирование таких зависимостей проблематично: если копируется только car - все ясно, мониторы копироваться не должны. А если копируются и мониторы? Др момент: избежать вектора мониторов в практической задаче вряд ли удастся - наблюдающий обязан среагировать на смену наблюдаемого.

Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #73 : Февраль 10, 2020, 18:02 »

Статический мьютекс это прекрасно =)
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #74 : Февраль 10, 2020, 19:38 »

Ну ладно, реализовал Car (аттач) как я понял задачу. Никакого применения вумным указателям я тут не вижу. Воткнул один юник, но чисто для понту, и без него можно спокойно обойтись.

Что ж... пусть это будет третий вариант. Может кто-то возьмёт его на вооружение Улыбающийся.

Согласно UML диаграмме, у Engine нет ссылок/указателей на Car и Monitor. Такие дела.

Замечу что копирование таких зависимостей проблематично: если копируется только car - все ясно, мониторы копироваться не должны. А если копируются и мониторы? Др момент: избежать вектора мониторов в практической задаче вряд ли удастся - наблюдающий обязан среагировать на смену наблюдаемого.

Копирование - это другая история и не нужно, этот пример про целостность связей.
Записан

Пока сам не сделаешь...
Страниц: 1 ... 3 4 [5] 6 7 ... 9   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.134 секунд. Запросов: 23.