Сообщение Re[2]: Проверка концептов внутри типа от 10.12.2024 12:15
Изменено 10.12.2024 13:08 rg45
Re[2]: Проверка концептов внутри типа
Здравствуйте, sergii.p, Вы писали:
SP>
Тогда уж проще:
Только закладывать в концепт наследование от конкретного класса — идея так себе, по-моему. Если на каждый концепт заводить по базовому классу — Cloneable, Printable, Loggagle, Serializable, Drawable, Sendable, Receivable, Insertable, Extractable... Программа превращается в зоопарк монстров. Концепты же для того и придумывались, чтоб этого всего не было, чтобы можно было реализовывать обобщенные алгоритмы, применимые как пользовательским класам, так и к встроенными и библиотечным типам.
Я бы, все-таки, пошерстил дизайн на предмет циклических зависимостей.
SP>
SP>template<typename T>
SP>concept cloneable = requires (T x) {
SP> static_cast<Clonable<T>>(x);
SP>};
SP>
Тогда уж проще:
template<typename T>
concept cloneable = std::derived_from<T, Cloneable<T>>;
Только закладывать в концепт наследование от конкретного класса — идея так себе, по-моему. Если на каждый концепт заводить по базовому классу — Cloneable, Printable, Loggagle, Serializable, Drawable, Sendable, Receivable, Insertable, Extractable... Программа превращается в зоопарк монстров. Концепты же для того и придумывались, чтоб этого всего не было, чтобы можно было реализовывать обобщенные алгоритмы, применимые как пользовательским класам, так и к встроенными и библиотечным типам.
Я бы, все-таки, пошерстил дизайн на предмет циклических зависимостей.
Re[2]: Проверка концептов внутри типа
Здравствуйте, sergii.p, Вы писали:
SP>
Тогда уж проще:
Только закладывать в концепт наследование от конкретного класса — идея так себе, по-моему. Если на каждый концепт заводить по базовому классу — Cloneable, Printable, Loggagle, Serializable, Drawable, Sendable, Receivable, Insertable, Extractable... Программа превращается в зоопарк монстров. Концепты же для того и придумывались, чтоб этого всего не было. Чтоб можно было реализовывать обобщенные алгоритмы, применимые как пользовательским класам, так и к встроенными и библиотечным типам.
Я бы, все-таки, пошерстил дизайн на предмет циклических зависимостей.
SP>
SP>template<typename T>
SP>concept cloneable = requires (T x) {
SP> static_cast<Clonable<T>>(x);
SP>};
SP>
Тогда уж проще:
template<typename T>
concept cloneable = std::derived_from<T, Cloneable<T>>;
Только закладывать в концепт наследование от конкретного класса — идея так себе, по-моему. Если на каждый концепт заводить по базовому классу — Cloneable, Printable, Loggagle, Serializable, Drawable, Sendable, Receivable, Insertable, Extractable... Программа превращается в зоопарк монстров. Концепты же для того и придумывались, чтоб этого всего не было. Чтоб можно было реализовывать обобщенные алгоритмы, применимые как пользовательским класам, так и к встроенными и библиотечным типам.
Я бы, все-таки, пошерстил дизайн на предмет циклических зависимостей.