Я попытался написать следующий код, но он был отклонен компилятором:
#include
struct Base {
virtual void f() {}
};
template
struct Derived : Base {
void f() requires std::is_same_v override {}
};
Соответствующий раздел стандарта я нашел здесь:
11.7.3 Виртуальные функции
6 Виртуальная функция не должна иметь завершающего предложения require ([dcl.decl]).
[Пример 5:
template
struct A {
virtual void f() requires true; // error: virtual function cannot be constrained ([temp.constr.decl])
};
— конец примера]
но я не понимаю мотивации этого. Учитывая, что для производного класса совершенно разумно не переопределять виртуальную функцию базового класса, почему не считается правильным решить, существует ли это переопределение на основе ограничения (время компиляции)?
Это ограничение кажется особенно глупым (по крайней мере, в этом примере), поскольку этот код является законным и, по сути, достигает того же самого, но более подробно:
template
struct Derived : Base {
};
template
requires std::is_same_v
struct Derived : Base {
void f() override {}
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-concept
Почему C++ не позволяет ограничивать переопределения виртуальных функций с помощью предложения Concept/Requires? ⇐ C++
Программы на C++. Форум разработчиков
1765812658
Anonymous
Я попытался написать следующий код, но он был отклонен компилятором:
#include
struct Base {
virtual void f() {}
};
template
struct Derived : Base {
void f() requires std::is_same_v override {}
};
Соответствующий раздел стандарта я нашел здесь:
11.7.3 Виртуальные функции
6 Виртуальная функция не должна иметь завершающего предложения require ([dcl.decl]).
[Пример 5:
template
struct A {
virtual void f() requires true; // error: virtual function cannot be constrained ([temp.constr.decl])
};
— конец примера]
но я не понимаю мотивации этого. Учитывая, что для производного класса совершенно разумно не переопределять виртуальную функцию базового класса, почему не считается правильным решить, существует ли это переопределение на основе ограничения (время компиляции)?
Это ограничение кажется особенно глупым (по крайней мере, в этом примере), поскольку этот код является законным и, по сути, достигает того же самого, но более подробно:
template
struct Derived : Base {
};
template
requires std::is_same_v
struct Derived : Base {
void f() override {}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79847613/why-doesnt-c-allow-virtual-function-overrides-to-be-constrained-by-a-concept[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия