Size: a a a

2020 March 11

MD

Mikhail Demchenko in pro.cxx
Александр Караев
Простая задачка на std::any - реализовать упрощённую std::function<Ret(Args...)>, которая хранит std::any obj + Ret(*ptr)(Args...)

std::any - базовый кирпичик для всего type erasure
А можете объяснить, что вы имеете в виду под строкой: std::any obj + Ret(*ptr)(Args...)
Указательна функцию и объект результата?
источник

АК

Александр Караев in pro.cxx
Mikhail Demchenko
А можете объяснить, что вы имеете в виду под строкой: std::any obj + Ret(*ptr)(Args...)
Указательна функцию и объект результата?
std::any obj для хранения самого функтора, указатель на функцию - чтобы из any вытаскивать то, что там лежит
источник

MD

Mikhail Demchenko in pro.cxx
Александр Караев
std::any obj для хранения самого функтора, указатель на функцию - чтобы из any вытаскивать то, что там лежит
Спасибо
источник

АК

Александр Караев in pro.cxx
Практически все случаи использования any - шаблонный код, причем в момент стирания типа где-то рядышком кладётся другая сущность, которая позволяет "восстановить" тип для конкретной операции.
@webreh наверняка может рассказать подробнее на более абстрактном уровне
источник

VF

Vitaly Farmov in pro.cxx
Mikhail Demchenko
Выглядят не привлекательно(по стилю - код в camelcase, файлы в snakecase) для регистрации используют макросы. Да и в принципе похоже скорее на антипаттерн
По стилю согласен, макросы предоставляются опционально, про 'похоже антипаттерн' безосновательно и неконкретно.
источник

MD

Mikhail Demchenko in pro.cxx
Vitaly Farmov
По стилю согласен, макросы предоставляются опционально, про 'похоже антипаттерн' безосновательно и неконкретно.
По поводу антипаттерна, просветите, используя классический паттерн фабрика, что вы конкретно добиваетесь? Если это только эстетика - то выглядит как антипаттерн и not C++ way. Если функционал, который сложно реализовать другими средствами современного языка то давайте обсудим.
источник

VF

Vitaly Farmov in pro.cxx
Mikhail Demchenko
По поводу антипаттерна, просветите, используя классический паттерн фабрика, что вы конкретно добиваетесь? Если это только эстетика - то выглядит как антипаттерн и not C++ way. Если функционал, который сложно реализовать другими средствами современного языка то давайте обсудим.
А из описания проекта не очень понятно?
источник

MD

Mikhail Demchenko in pro.cxx
Vitaly Farmov
А из описания проекта не очень понятно?
Нет, я говорю о том, что возможно паттерн фабрики устарел как таковой, и не важно гетерогенная она или нет.
источник

VF

Vitaly Farmov in pro.cxx
Mikhail Demchenko
Нет, я говорю о том, что возможно паттерн фабрики устарел как таковой, и не важно гетерогенная она или нет.
Интересная мысль, в моем сознании данный паттерн живее всех живых
источник

АК

Александр Караев in pro.cxx
Да, это прекрасный пример использования any
источник

MD

Mikhail Demchenko in pro.cxx
Vitaly Farmov
Интересная мысль, в моем сознании данный паттерн живее всех живых
Вот что у меня в голове: паттерн фабрики используют для: 1.Инкапсуляции 2х этапной инициализации объекта в один вызов (что само по себе антипаттерн и, если я не ошибаюсь, указано таковым в core guidelines)
2. Применение кастомного хранилища объектов - с чем справляются аллокаторы, пер определяемые операторы new/delete и как таковой подсчёт ссылок

Вот мне хочется услышать для чего вы ещё используете данный паттерн?
источник

VF

Vitaly Farmov in pro.cxx
Mikhail Demchenko
Вот что у меня в голове: паттерн фабрики используют для: 1.Инкапсуляции 2х этапной инициализации объекта в один вызов (что само по себе антипаттерн и, если я не ошибаюсь, указано таковым в core guidelines)
2. Применение кастомного хранилища объектов - с чем справляются аллокаторы, пер определяемые операторы new/delete и как таковой подсчёт ссылок

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

MD

Mikhail Demchenko in pro.cxx
Vitaly Farmov
Для порождения объектов по неизвестному на входе ключу. Допустим, спарсили строку откуда-нибудь и хотите по этой строке создать объект.
Вы хотите создать новый тип из строки? Тогда вам в питон. Если вы хотите построить объект на основании строки используйте паттерн билдер или конструктор от строки. Что вы в итоге пытаетесь добиться?
источник

АК

Александр Караев in pro.cxx
Mikhail Demchenko
Вы хотите создать новый тип из строки? Тогда вам в питон. Если вы хотите построить объект на основании строки используйте паттерн билдер или конструктор от строки. Что вы в итоге пытаетесь добиться?
Поставленная задача - иметь отображение из строк в некоторые типы в рантайме. Простенькая рантайм рефлексия
источник

MD

Mikhail Demchenko in pro.cxx
Александр Караев
Поставленная задача - иметь отображение из строк в некоторые типы в рантайме. Простенькая рантайм рефлексия
Т.е. очередная десериализация? Эту задачу решают уже долгие годы и совершенно разными способами. Скорее всего без поддержки языком рефлексии и инъекции это задача «красиво» не решается вообще.
источник

MD

Mikhail Demchenko in pro.cxx
Более менее принимаемый повсеместно метод - перегрузка свободных друзей или переопределение треитов - как современный паттерн для обработки десериализации и сериализации
источник

АК

Александр Караев in pro.cxx
Mikhail Demchenko
Т.е. очередная десериализация? Эту задачу решают уже долгие годы и совершенно разными способами. Скорее всего без поддержки языком рефлексии и инъекции это задача «красиво» не решается вообще.
Видимо, да. Каждому своё
источник

IZ

Ilia Zviagin in pro.cxx
Mikhail Demchenko
Т.е. очередная десериализация? Эту задачу решают уже долгие годы и совершенно разными способами. Скорее всего без поддержки языком рефлексии и инъекции это задача «красиво» не решается вообще.
#define КРАСИВО
источник

IZ

Ilia Zviagin in pro.cxx
Mikhail Demchenko
Т.е. очередная десериализация? Эту задачу решают уже долгие годы и совершенно разными способами. Скорее всего без поддержки языком рефлексии и инъекции это задача «красиво» не решается вообще.
По мне так полиморфный метод this->writeToStream() -- это красиво.
источник

MD

Mikhail Demchenko in pro.cxx
Ilia Zviagin
По мне так полиморфный метод this->writeToStream() -- это красиво.
В принципе - да, но как всегда - решение не для всех. Но тут речь идёт о принципиальном стирании типа. Было бы идеально, если бы std::any создавало бы водную точку для «duck-typing» в языке. Тогда это был бы действительно полезный инструмент.
источник