Краткая версия вопроса
C++23 дает нам новый способ написания классов-примесей (вместо CRTP). Есть ли контекст, в котором CRTP по-прежнему будет предпочтительнее?
Краткое описание двух подходов
CRTP — это мощная идиома в C++, которая использует шаблоны для автоматического создания поведения, зависящего от типа, во время выполнения. Это часто используется для создания классов-примесей.
В C++23 представлены явные параметры объекта, которые позволяют явно ссылаться на имя класса в списках параметров нестатических функций-членов. В результате нестатические функции-члены шаблона могут получить доступ к производному классу, что устраняет необходимость специализировать примесь на производном классе.
Вот пример, иллюстрирующий старый и новый подход.
// классический CRTP (старый подход) шаблон класс MyMixin { // ... недействительный Фу() { // Что-то с использованием T... } }; // необходимо специализировать MyMixin вместо MyType класс MyType: public MyMixin { // ... }; // явный параметр объекта (подход C++23) класс MyMixin { // ... шаблон void foo(это T* self) { // Что-то с использованием T... } }; // лучший синтаксис для миксинов класс MyType: public MyMixin { // ... }; Очевидно, что новый подход приводит к более чистому синтаксису производного класса. Например, это позволяет нам избегать таких неприятных вещей:
template класс MyWackyContainer: public MyMixin поскольку при новом подходе нам не нужно предоставлять параметр шаблона для MyMixin.
Полный вопрос
Согласно аннотации этой статьи (в которой рассматривается ранее упомянутая проблема),
Хотя [добавление явных параметров объекта] устранило необходимость использования CRTP во многих местах, все еще существуют случаи, которые необходимо выражать с использованием этого шаблона.
Единственное функциональное различие, которое я мог придумать между CRTP и новым подходом, заключается в том, что CRTP позволяет нам ссылаться на тип при объявлении нефункциональных членов и статических функций-членов. Но есть ли ситуации, когда это действительно полезно?
(Вторичный вопрос: правильно ли я понял? Я что-то пропустил?)
Когда использовать CRTP вместо явного параметра объекта в С++ 23? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1698431093
Anonymous
Краткая версия вопроса
C++23 дает нам новый способ написания классов-примесей (вместо CRTP). Есть ли контекст, в котором CRTP по-прежнему будет предпочтительнее?
Краткое описание двух подходов
CRTP — это мощная идиома в C++, которая использует шаблоны для автоматического создания поведения, зависящего от типа, во время выполнения. Это часто используется для создания классов-примесей.
В C++23 представлены [b]явные параметры объекта[/b], которые позволяют явно ссылаться на имя класса в списках параметров нестатических функций-членов. В результате нестатические функции-члены шаблона могут получить доступ к производному классу, что устраняет необходимость специализировать примесь на производном классе.
Вот пример, иллюстрирующий старый и новый подход.
// классический CRTP (старый подход) шаблон класс MyMixin { // ... недействительный Фу() { // Что-то с использованием T... } }; // необходимо специализировать MyMixin вместо MyType класс MyType: public MyMixin { // ... }; // явный параметр объекта (подход C++23) класс MyMixin { // ... шаблон void foo(это T* self) { // Что-то с использованием T... } }; // лучший синтаксис для миксинов класс MyType: public MyMixin { // ... }; Очевидно, что новый подход приводит к более чистому синтаксису производного класса. Например, это позволяет нам избегать таких неприятных вещей:
template класс MyWackyContainer: public MyMixin поскольку при новом подходе нам не нужно предоставлять параметр шаблона для MyMixin.
Полный вопрос
Согласно аннотации этой статьи (в которой рассматривается ранее упомянутая проблема),
Хотя [добавление явных параметров объекта] устранило необходимость использования CRTP во многих местах, все еще существуют случаи, которые необходимо выражать с использованием этого шаблона.
Единственное функциональное различие, которое я мог придумать между CRTP и новым подходом, заключается в том, что CRTP позволяет нам ссылаться на тип при объявлении нефункциональных членов и статических функций-членов. [b]Но есть ли ситуации, когда это действительно полезно?[/b]
(Вторичный вопрос: правильно ли я понял? Я что-то пропустил?)
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия