Как при создании экземпляра собственного контейнерного класса в "<>" передать тип элементов

У меня задача: реализовать очередь как класс в C++. В конструкторе класса vector передаётся тип элементов, например, vector <int> a. Как мне также передать тип элементов в конструктор своего класса, например, MyQueue <int> a?


Ответы (1 шт):

Автор решения: KoVadim

Скорее всего Ваш шаблонный класс будет выглядеть где то так

template <typename T>
class MyQueue
{

};

и такой класс уже можно использовать как Вам хочется

MyQueue<int> a;

другое дело, что этот класс ничего не делает:) Но это легко дописать. Если Ваш класс не должен делать чего то "сверхъестественного", то используем простое правило, везде, где нужен этот "тип с конструктора" (да, я знаю, что это неправильная формулировка, но это же короткий курс в шаблонные классы:) ), просто пишите T (это имя указанно в угловых скобках после typename).

Например, напишем заготовку для push

template <typename T>
class MyQueue
{
  std::vector<T> m_data; // где то же нужно это хранить
  public:
    void push(T el) { m_data.push_back(el); };
};

ну или так (если тип "большой", то его лучше передать по константной ссылке. А может даже стоит подумать о std::move).

void push(const T& el) { m_data.push_back(el); };

и теперь, когда Вы напишите MyQueue<double> data; будет сгенерировано где то такое

template <>
class MyQueue
{
  std::vector<double> m_data; // где то же нужно это хранить
  public:
    void push(double el) { m_data.push_back(el); };
};

теперь дописывайте функции, которые Вам нужны и готово.

→ Ссылка