Сообщение Re[5]: Наследовать stl::list<T> as string<T> от 27.11.2022 13:16
Изменено 27.11.2022 13:17 rg45
Re[5]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:
Тут все просто, только вы напрасно поменяли эти объявления местами. Нужно вот так:
Первое объявление: using list = std::list<std::basic_string<T>> вносит имя базового класса list в пространство имен производного класса basic_text. Для нешаблонных базовых классов (точнее, для базовых классов, не зависящих от параметров шаблона), такое действие выполняется автоматически. В этом же случае это имеет смысл сделать руками.
Второе объявление: using list::list обеспечивает использование всех конструкторов базового класса list в производном классе basic_text. Остальные функции-члены наследуются автоматически. В результате все то, что есть в базовом классе, становится доступным и в производном, ничего не нужно писать повторно.
S>Я правда не совсем понимаю значимость
S>using list::list;
S>using list = std::list<T>;
S>но эта тема дополнительных познаний!
Тут все просто, только вы напрасно поменяли эти объявления местами. Нужно вот так:
template <class T>
class basic_text : public std::list<std::basic_string<T>>
{
public:
using list = std::list<std::basic_string<T>>;
using list::list;
};
Первое объявление: using list = std::list<std::basic_string<T>> вносит имя базового класса list в пространство имен производного класса basic_text. Для нешаблонных базовых классов (точнее, для базовых классов, не зависящих от параметров шаблона), такое действие выполняется автоматически. В этом же случае это имеет смысл сделать руками.
Второе объявление: using list::list обеспечивает использование всех конструкторов базового класса list в производном классе basic_text. Остальные функции-члены наследуются автоматически. В результате все то, что есть в базовом классе, становится доступным и в производном, ничего не нужно писать повторно.
Re[5]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:
S>Я правда не совсем понимаю значимость
S>но эта тема дополнительных познаний!
Тут все просто, только вы напрасно поменяли эти объявления местами. Нужно вот так:
Первое объявление: using list = std::list<std::basic_string<T>> вносит имя базового класса list в пространство имен производного класса basic_text. Для нешаблонных базовых классов (точнее, для базовых классов, не зависящих от параметров шаблона), такое действие выполняется автоматически. В этом же случае это имеет смысл сделать руками.
Второе объявление: using list::list обеспечивает использование всех конструкторов базового класса list в производном классе basic_text. Остальные функции-члены наследуются автоматически. В результате все то, что есть в базовом классе, становится доступным и в производном, ничего не нужно писать повторно.
S>Я правда не совсем понимаю значимость
S>using list::list;
S>using list = std::list<T>;
S>но эта тема дополнительных познаний!
Тут все просто, только вы напрасно поменяли эти объявления местами. Нужно вот так:
template <class T>
class basic_text : public std::list<std::basic_string<T>>
{
public:
using list = std::list<std::basic_string<T>>;
using list::list;
};
Первое объявление: using list = std::list<std::basic_string<T>> вносит имя базового класса list в пространство имен производного класса basic_text. Для нешаблонных базовых классов (точнее, для базовых классов, не зависящих от параметров шаблона), такое действие выполняется автоматически. В этом же случае это имеет смысл сделать руками.
Второе объявление: using list::list обеспечивает использование всех конструкторов базового класса list в производном классе basic_text. Остальные функции-члены наследуются автоматически. В результате все то, что есть в базовом классе, становится доступным и в производном, ничего не нужно писать повторно.