Если нельзя наследоваться от контейнеров...
.., то откуда взялся QStringList?
Русский военный корабль идёт ко дну!
Re: Если нельзя наследоваться от контейнеров...
Здравствуйте, Alexander G, Вы писали:
AG>.., то откуда взялся QStringList?
В STL нельзя, а Qt можно воротить что хочешь, вернее, что Qt не запрещает. У них там свои правила. Они же QStringList не от стандартного контейнера наследуют?
Re: Если нельзя наследоваться от контейнеров...
От:
uzhas
Дата: 02.12.16 15:32
Оценка:
+2
Здравствуйте, Alexander G, Вы писали:
AG>.., то откуда взялся QStringList?
что с тобой? переработал?
ну так впереди выходные!
Re: Если нельзя наследоваться от контейнеров...
От:
_NN_
Дата: 04.12.16 06:43
Оценка:
+1
Здравствуйте, Alexander G, Вы писали:
AG>.., то откуда взялся QStringList?
Что значит нельзя ?
std::vector ведь не объявлен финальным классом.
Re: Если нельзя наследоваться от контейнеров...
От:
T4r4sB
Дата: 04.12.16 09:30
Оценка:
Здравствуйте, Alexander G, Вы писали:
можно. Только без динамического полиморфизма.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[2]: Если нельзя наследоваться от контейнеров...
От:
T4r4sB
Дата: 04.12.16 09:33
Оценка:
Здравствуйте, _NN_, Вы писали:
_NN>Что значит нельзя ?
Типа в кривых руках можно родить такое:
class Fuck : public std:vector
{
public :
std::string oops;
};
std::unique_ptr<std::vector> fuck = std::make_unique<Fuck>();
При удалении oops не удалится
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: Если нельзя наследоваться от контейнеров...
От:
_NN_
Дата: 04.12.16 11:51
Оценка:
Здравствуйте, T4r4sB, Вы писали:
TB>Здравствуйте, _NN_, Вы писали:
_NN>>Что значит нельзя ?
TB>Типа в кривых руках можно родить такое:
TB>TB>class Fuck : public std:vector
TB>{
TB> public :
TB> std::string oops;
TB>};
TB>std::unique_ptr<std::vector> fuck = std::make_unique<Fuck>();
TB>
TB>При удалении oops не удалится
А если std::shared_ptr или явно подставить правильную функцию удаления то удалится
В любом случае контейнеры не предназначены для полиморфного использования ведь у них нет виртуальных функций.
Поэтому наследовать можно, а пользоваться вышеуказанным способом нет.
Между прочим это касается всех классов, где нет виртуального деструктора, а не только контейнеров.
Re: Если сильно хочется то можно
Здравствуйте, Alexander G, Вы писали:
template <typename T, typename Container = std::deque<T>>
class iterable_queue : public std::queue<T, Container>
{
public :
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
iterator begin() { return this ->c.begin(); }
iterator end() { return this ->c.end(); }
const_iterator begin() const { return this ->c.begin(); }
const_iterator end() const { return this ->c.end(); }
};
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить