170 похожих чатов

А если, к примеру, мы не нашли ни модель, ни

тип, и хотим вывести код об ошибке в консоль, мол ничего не найдено?

30 ответов

7 просмотров

как вариант - добавить вариант TypeInfo.WrongInput какой-нибудь

switch(result) { case TypeInfo::CarInfo: std::cout << "CarInfo"; break; case TypeInfo::CarModel: std::cout << "CarModel"; break; default: std::cout << "Error"; break; }

std::slavik
switch(result) { case TypeInfo::CarInfo: std::...

плюс enum в том что его можно использовать в switch case

https://gieseanw.wordpress.com/2018/12/29/stop-reimplementing-the-virtual-table-and-start-using-double-dispatch/

Illia Palkin
https://gieseanw.wordpress.com/2018/12/29/stop-rei...

ну на каждый чих визитор делать тоже не надо)

std::slavik
ну на каждый чих визитор делать тоже не надо)

Пусть почитает. Полезно будет. А там уже решит что ему нужно в его задачах

Illia Palkin
https://gieseanw.wordpress.com/2018/12/29/stop-rei...

а кто-то видел это на практике где-то?

Gleb Pylypets
а кто-то видел это на практике где-то?

Я видел сотни енамов и ф-й GetType() в проде) И был мягко говоря не в восторге

Illia Palkin
Я видел сотни енамов и ф-й GetType() в проде) И бы...

Особенно когда тебе нужно делать диспатчинг в больше чем 1 месте и у тебя эта сотня свит-кейсов по всей кодовой базе

Aidar Fattakhov
Ну тут так же сотня методов в визиторе

Но не сотня свитч-кейсов в каждой ф-и где приходит объект с иерархии

Aidar Fattakhov
А такого я никогда не видел

enum class AnimalType { Dog, Cat, Chicken }; struct Animal { AnimalType GetType(); }; void ProcessAnimal(const Animal& animal); void PrintAnimal(const Animal& animal); Ну приходится в каждую ф-ю которая принимает Animal тащить свитч-кейс

Illia Palkin
enum class AnimalType { Dog, Cat, Chic...

для этого существует наследование и полиморфизм

Till Schneider
для этого существует наследование и полиморфизм

Но с наследованием то же самое получится. Просто будешь касты делать. (Если не юзать дабл диспатч)

Illia Palkin
Но с наследованием то же самое получится. Просто б...

Вообще если ты пишешь функцию, которая принимает животное но хочет при этом для кота что то сделать, то это обычно означает что тут что то не так

Illia Palkin
Это абстрактный пример

Это не важно, можно хоть трипл диспатч придумать

std::slavik
ну типа не совсем

Я не помню нормальных историй где реально нужен был даункаст в функции

Denis P
Я не помню нормальных историй где реально нужен бы...

Я работал на проекте где такого навалом. И виртуальных ф-й GetType() и диспатчингов и всего самого лучшего

Illia Palkin
Я работал на проекте где такого навалом. И виртуал...

Я не говорю что таких проектов нет, я говорю что дабл диспатч для меня это попытка решение до этого руками созданной проблемы

Denis P
Я не помню нормальных историй где реально нужен бы...

ну я вот вчера использовал для такой задачи есть такой вот типа код - MCInst - базовый тип для эмиссии машинного кода - в нем по сути содержатся байты без всякой доп информации std::unique_ptr<MCInst> ins; ins = emitter.emit(*ctr); но для некоторых операций есть аппаратные ограничения которые неплохо бы проверять, они(если есть) добавляются в класс - наследник MCInst и в валидаторе мы пробуем сделать каст к этому классу - и если он получается - проверяем для него рестрикшены if (not Validator::validate(ins)) { return false; }

std::slavik
ну я вот вчера использовал для такой задачи есть ...

Почему в базовый класс не вынести функцию просто? Либо сделать базовый класс "операция с ограничениями", насладник вашего супер общего класса

std::slavik
разделение ответственности

Да, потому я думаю что операции с ограничениями это другой базовый класс

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта