Используйте как значение pair, так и значение int для класса, используя имя типа

#c #templates

#c #шаблоны

Вопрос:

Допустим, у меня есть этот класс с именем Queue, который использует имя типа.

 template <typename Type>
class Queue {
private:
    int sz;

    struct element {
        Type val;
        element *next;

        element() {
            val = 0;
            next = nullptr;
        }
    };
    element *first, *last;
}
  

Теперь, если я хочу создать очередь типа int, проблем нет. Однако, если я хочу создать другую очередь типа pair, строка val = 0; выдает ошибку, поскольку 0 не имеет типа pair . Есть ли какой-либо способ избежать этого или обобщить его?

Комментарии:

1. Почему бы не использовать Type конструктор in element ?

2. Вы можете сделать val = {}; ?

3. Спасибо за ваши ответы, оба работают, хотя я предпочитаю вариант @Den-Jason, поскольку мне не нужно каждый раз вводить аргументы.

4. element в любом случае, вероятно, конструктор по умолчанию не нужен. Может потребоваться параметризация, копирование, перемещение и присвоение, но не по умолчанию.

5. Как вы думаете, почему element() необходимо делать что-то значимое? Допустим, ваш Type почтовый адрес. Как вы создаете почтовый адрес из ниоткуда? В какой стране он находится? Если это запись person, может ли у вас быть nobody в вашей базе данных?