LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

using Object = std::variant<Printer, Scanner, Foo>;

это хранение с тегом типа, о чем я и говорил. только спрятанное в мега_типа_крутой темплейт.

потом по тегу динамически выбирается правильный вариант call. по сути это вызов «виртуального метода» через задний проход, только больше по коду и совершенно нечитабельно.

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

и потом . для принтера и сканера в одном флаконе команда и принтанет и отсканит за один вызов… но зачем такое надо непонятно. или принтить или сканить оно должно

Исправление alysnix, :

using Object = std::variant<Printer, Scanner, Foo>;

это хранение с тегом типа, о чем я и говорил. только спрятанное в мега_типа_крутой темплейт.

потом по тегу динамически выбирается правильный вариант call. по сути это вызов «виртуального метода» через задний проход, только больше по коду и совершенно нечитабельно.

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

Исходная версия alysnix, :

using Object = std::variant<Printer, Scanner, Foo>;

это хранение с тегом типа, о чем я и говорил. только спрятанное в мега_типа_крутой темплейт.

потом по тегу динамически выбирается правильный вариант call. по сути это вызов «виртуального метода» через задний проход, только больше по коду и совершенно нечитабельно.