Как при создании экземпляра собственного контейнерного класса в "<>" передать тип элементов
У меня задача: реализовать очередь как класс в C++. В конструкторе класса vector передаётся тип элементов, например, vector <int> a. Как мне также передать тип элементов в конструктор своего класса, например, MyQueue <int> a?
Ответы (1 шт):
Скорее всего Ваш шаблонный класс будет выглядеть где то так
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); };
};
теперь дописывайте функции, которые Вам нужны и готово.