Jak sprawdzić, czy para szablonów ma wartość

Dec 01 2020

Koduję strukturę trie w C ++ z fragmentem szablonu:

pair<char,T>

Mam metodę void empty (), w której chcę sprawdzić, czy druga wartość roota nie jest ustawiona (wartość jest równa domyślnej wartości konstruktora lub szczegółowo: wartości będą przechowywać inne typy par.). Wiem, że domyślny konstruktor zastosowałby 0 dla typu danych int, ale jak mogę to sprawdzić w szablonie?

Wspomniał o tym inny post: return root == new Trie <char, T> () (nieudany duet do nieznanego operatora ==)

Z góry dziękuję

Odpowiedzi

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

A std::pairs członek nie może być „nie jest ustawiona”.

Możesz użyć std::optionaldo modelowania wartości opcjonalnej.


„... wartość jest równa domyślnemu konstruktorowi ...”

Oczywiście możesz sprawdzić, czy aktualna wartość jest równa początkowej:

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>";
}

Lub dla drugiego członka std::pair<int,T>:

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

Kompletny przykład:

#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);
}