Как проверить, имеет ли пара шаблонов значение

Dec 01 2020

Я кодирую trie-структуру на C ++ с помощью фрагмента шаблона:

pair<char,T>

У меня есть метод void empty (), в котором я хочу проверить, не установлено ли второе значение корня (значение равно значению конструктора по умолчанию или подробно: значения будут хранить другие типы пар.). Я знаю, что конструктор по умолчанию применит 0 для типа данных int, но как я могу проверить это внутри шаблона?

В другом сообщении упоминалось об этом: return root == new Trie <char, T> () (неудачный дуэт с неизвестным оператором ==)

заранее спасибо

Ответы

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Член std::pairs не может быть "не установлен".

Вы можете использовать std::optionalдля моделирования необязательного значения.


"... значение равно конструктору по умолчанию ..."

Конечно, вы можете проверить, совпадает ли текущее значение с начальным:

std::pair<int,int> x;
if (x.first == 0) {
    std::cout << "value of x.first is that of a default constructed std::pair<int,int>";
}

Или для второго члена std::pair<int,T>:

if (x.second == T{} ) {
    std::cout << "second has same value as a default constructed T";
}

Полный пример:

#include <iostream>
#include <utility>

template <typename T>
bool check_if_default_second(const std::pair<int,T>& p) {
    return p.second == T{};
}


int main() {
    std::pair<int,int> p;
    std::cout << check_if_default_second(p);
}