Como verificar se um par de modelos tem valor

Dec 01 2020

estou codificando uma estrutura trie em C ++ com um snippet de modelo:

pair<char,T>

Eu tenho um método void empty () no qual desejo verificar se o segundo valor da raiz não está definido (o valor é igual ao valor padrão do construtor ou em detalhes: os valores armazenariam outros tipos de pares). Eu sei que o construtor padrão aplicaria 0 para o tipo de dados int, mas como posso verificar isso dentro do modelo?

Outra postagem mencionou isso: return root == new Trie <char, T> () (falha dupla para operador == desconhecido)

desde já, obrigado

Respostas

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Um std::pairmembro não pode ser "não definido".

Você pode usar std::optionalpara modelar um valor opcional.


"... o valor é igual ao construtor padrão ..."

Claro, você pode verificar se o valor atual é igual ao inicial:

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

Ou para o segundo membro de um std::pair<int,T>:

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

Exemplo completo:

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