es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mapear objeto de salida donde el valor puede ser de cualquier tipo de dato.

Tratando de emitir un objeto de mapa donde el valor puede ser de cualquier tipo de datos. He intentado lo siguiente:

#include <iostream>
#include <unordered_map>
#include <any>

std::unordered_map<std::string, std::any=""> example = {
    {"first", 'A'},
    {"second", 2},
    {"third", 'C'}
};

std::ostream &operator<<(std::ostream &os,
                    const std::any &m) {
 for (auto &t : example) {
    os << "{" << t.first << ": " << t.second << "}\n";
}
return os;
}

 int main()
{std::cout << example;
 return 0;
}

Pero, obtengo un bucle infinito de valores.</std::string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que la sobrecarga de operator<< se está llamando a sí misma de forma recursiva, lo que lleva a un bucle infinito. En lugar de iterar sobre el mapa example de nuevo dentro de la sobrecarga de operator<<, deberíamos iterar sobre el mapa pasado como segundo argumento (m). Aquí hay una implementación revisada:
    “`c++
    #include
    #include
    #include

    std::ostream& operator<<(std::ostream& os, const std::unordered_map<std::string, std::any=””>& m) {
    for (const auto& [key, value] : m) {
    os << “{” << key << “: “;
    if (value.type() == typeid(char)) {
    os << std::any_cast(value);
    } else if (value.type() == typeid(int)) {
    os << std::any_cast(value);
    } else if (value.type() == typeid(char*)) {
    os << std::any_cast(value);
    } else {
    os << “tipo no soportado”;
    }
    os << “} “;
    }
    return os;
    }

    int main() {
    std::unordered_map<std::string, std::any=””> example = {
    {“first”, ‘A’},
    {“second”, 2},
    {“third”, “hello”}
    };
    std::cout << example << std::endl;
    return 0;
    }
    “`

    Esta sobrecarga de operator<< revisada imprimirá correctamente los pares clave-valor de cualquier unordered_map donde el valor puede ser cualquier tipo de datos compatible con std::any. Tenga en cuenta que para simplificar, solo hemos agregado soporte para los tipos de valor char, int y const char*, pero puede agregar más casos según sea necesario para su caso de uso.</std::string,></std::string,>

Comments are closed.