Сообщение Re[5]: Наследовать stl::list<T> as string<T> от 27.11.2022 11:33
Изменено 27.11.2022 11:38 rg45
Re[5]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:
S>Здравствуйте, rg45, Вы писали:
S>
S>Спасибо, работает!
Не верю Не может оно работать в таком виде — вы поменяли местами using объявления и забыли указать спецификацию доступа "public" для этих объявлений.
S>А насчет зачем нужен basic_text, согласитесь basic_text::load(szFlie) выглядит эстетичнее чем void load(std::list &list, const char* szFile) !!!
Ну, на счет эстетичности спорить не стану, это дело вкуса. Но в таком случае определение list_of_string является для вас лишним, можно все сделать сразу в определении basic_text. Зачем же плодить лишние имена?
http://coliru.stacked-crooked.com/a/221c3d39454a6edc
S>Здравствуйте, rg45, Вы писали:
S>
R>template <class T>
R>>class basic_text : public std::list<T>
R>>{
R>> using list::list;
R>> using list = std::list<T>;
R>>};
R>>template <class T>
R>>using list_of_string = basic_text<std::basic_string<T>>;
S>Спасибо, работает!
Не верю Не может оно работать в таком виде — вы поменяли местами using объявления и забыли указать спецификацию доступа "public" для этих объявлений.
S>А насчет зачем нужен basic_text, согласитесь basic_text::load(szFlie) выглядит эстетичнее чем void load(std::list &list, const char* szFile) !!!
Ну, на счет эстетичности спорить не стану, это дело вкуса. Но в таком случае определение list_of_string является для вас лишним, можно все сделать сразу в определении basic_text. Зачем же плодить лишние имена?
http://coliru.stacked-crooked.com/a/221c3d39454a6edc
#include <iostream>
#include <list>
#include <string>
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;
};
int main()
{
const basic_text<char> list { "one", "two", "three" };
if (!list.empty())
{
for (const auto& s : list)
{
std::cout << s << std::endl;
}
}
}
Re[5]: Наследовать stl::list<T> as string<T>
Здравствуйте, Su34, Вы писали:
S>Здравствуйте, rg45, Вы писали:
S>
S>Спасибо, работает!
Это значит, что у вас не самый новый компилятор. Не следовало менять эти объявления местами, на современных компиляторах в этом порядке не скомпилируется. Ну и спецификацию public для этих объявлений лучше указать явно, раз уж вы заменили "struct" на "class".
S>А насчет зачем нужен basic_text, согласитесь basic_text::load(szFlie) выглядит эстетичнее чем void load(std::list &list, const char* szFile) !!!
Ну, на счет эстетичности спорить не стану, это дело вкуса. Но в таком случае определение list_of_string является для вас лишним, можно все сделать сразу в определении basic_text. Зачем же плодить лишние имена?
http://coliru.stacked-crooked.com/a/221c3d39454a6edc
S>Здравствуйте, rg45, Вы писали:
S>
R>template <class T>
R>>class basic_text : public std::list<T>
R>>{
R>> using list::list;
R>> using list = std::list<T>;
R>>};
R>>template <class T>
R>>using list_of_string = basic_text<std::basic_string<T>>;
S>Спасибо, работает!
Это значит, что у вас не самый новый компилятор. Не следовало менять эти объявления местами, на современных компиляторах в этом порядке не скомпилируется. Ну и спецификацию public для этих объявлений лучше указать явно, раз уж вы заменили "struct" на "class".
S>А насчет зачем нужен basic_text, согласитесь basic_text::load(szFlie) выглядит эстетичнее чем void load(std::list &list, const char* szFile) !!!
Ну, на счет эстетичности спорить не стану, это дело вкуса. Но в таком случае определение list_of_string является для вас лишним, можно все сделать сразу в определении basic_text. Зачем же плодить лишние имена?
http://coliru.stacked-crooked.com/a/221c3d39454a6edc
#include <iostream>
#include <list>
#include <string>
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;
};
int main()
{
const basic_text<char> list { "one", "two", "three" };
if (!list.empty())
{
for (const auto& s : list)
{
std::cout << s << std::endl;
}
}
}