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

Сообщение Re[4]: Наследовать stl::list<T> as string<T> от 27.11.2022 10:38

Изменено 27.11.2022 10:46 rg45

Re[4]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:

S>Далее вроде бы логично:

S>
template <class T>
S>class basic_text : public std::list<T>
S>{
S>};
S>template <class T>
S>using list_of_string = basic_text<std::basic_string<T>>;
S>

S>А нет!

Что именно "нет"? Я же дал ссылку на работающий пример, который компилируется и запускается на выполнение и работает.

А так, как вы определили шаблонный класс basic_text, конечно, полноценно работать не будет, хотя бы из-за отсутствия необходимого набора конструкторов.
Re[4]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:

S>Далее вроде бы логично:

S>
template <class T>
S>class basic_text : public std::list<T>
S>{
S>};
S>template <class T>
S>using list_of_string = basic_text<std::basic_string<T>>;
S>

S>А нет!

Что именно "нет"? Я же дал ссылку на работающий пример, который компилируется и запускается на выполнение и работает.

А так, как вы определили шаблонный класс basic_text, конечно, полноценно работать не будет, хотя бы из-за отсутствия необходимого набора конструкторов.

Вы обратите внимание на директивы "using" в моем примере, они же не просто так там написаны. Если вы добавите такие же объявления в своем классе, то у вас тоже все заработает:

template <class T>
class basic_text : public std::list<T>
{
  using list = std::list<T>;
  using list::list;
};
template <class T>
using list_of_string = basic_text<std::basic_string<T>>;


Только я не очень понимаю, зачем вам вообще нужен этот basic_text, если вместо него вы можете использовать непосредственно std::list:

template <class T>
using list_of_string = std::list<std::basic_string<T>>;