Информация об изменениях

Сообщение 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, Вы писали:

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::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. Остальные функции-члены наследуются автоматически. В результате все то, что есть в базовом классе, становится доступным и в производном, ничего не нужно писать повторно.