Расширение шаблона класса - PullRequest
3 голосов
/ 29 апреля 2010

Как бы я расширил класс шаблона, например, вектор? Код ниже не работает. Компилятор жалуется, что Vector не является шаблоном.

template <typename T>
class Vector<T> : public std::vector<T>
{
public:
    void DoSomething()
    {
        // ...
    }
};

Ответы [ 2 ]

19 голосов
/ 29 апреля 2010

Ваш синтаксис неправильный; вам нужно использовать:

template <typename T>
class Vector : public std::vector<T>

Тем не менее, вы не должны расширять контейнеры стандартной библиотеки с помощью наследования, если не по какой-либо другой причине, потому что у них нет виртуальных деструкторов, и поэтому это небезопасно по своей природе.

Если вы хотите «улучшить» std::vector, сделайте это, используя композицию (то есть с переменной-членом типа std::vector) или используйте функции, не являющиеся членами, для предоставления дополнительных функций.

6 голосов
/ 29 апреля 2010

Это не имеет ничего общего с расширением другого класса. Проблема в вашем собственном производном классе.

Вы определяете шаблон класса следующим образом:

template <typename T>
class Vector
{
...

а не

template <typename T>
class Vector<T>
{
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...