Если нельзя наследоваться от контейнеров...
От: Alexander G Украина  
Дата: 02.12.16 15:16
Оценка:
.., то откуда взялся QStringList?
Русский военный корабль идёт ко дну!
Re: Если нельзя наследоваться от контейнеров...
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.12.16 15:21
Оценка: +3
Здравствуйте, 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 ведь не объявлен финальным классом.
http://rsdn.nemerleweb.com
http://nemerleweb.com
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 или явно подставить правильную функцию удаления то удалится
В любом случае контейнеры не предназначены для полиморфного использования ведь у них нет виртуальных функций.
Поэтому наследовать можно, а пользоваться вышеуказанным способом нет.

Между прочим это касается всех классов, где нет виртуального деструктора, а не только контейнеров.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Если сильно хочется то можно
От: turbocode  
Дата: 08.12.16 18:43
Оценка: -1
Здравствуйте, 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(); }
   };
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.