Cómo comprobar si un par de plantillas tiene valor

Dec 01 2020

estoy codificando una estructura trie en C ++ con un fragmento de plantilla:

pair<char,T>

Tengo un método void empty () en el que quiero verificar si el segundo valor de la raíz no está establecido (el valor es igual al valor predeterminado del constructor o en detalle: los valores almacenarían otros tipos de pares). Sé que el constructor predeterminado aplicaría 0 para el tipo de datos int, pero ¿cómo puedo verificar esto dentro de la plantilla?

Otra publicación mencionó esto: return root == new Trie <char, T> () (dúo fallido al operador == desconocido)

Gracias por adelantado

Respuestas

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Un std::pairmiembro no puede ser "no establecido".

Puede utilizar std::optionalpara modelar un valor opcional.


"... el valor es igual al constructor predeterminado ..."

Por supuesto, puede verificar si el valor actual es igual al 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>";
}

O para el segundo miembro de un std::pair<int,T>:

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

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