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.

Múltiples tipos de datos dentro de un vector de punteros utilizando plantillas

Tengo dos clases que se muestran a continuación:

template <typename t=""> class node   {
public:
    int NodeID;//ID utilizado para identificar el nodo al insertar/eliminar/buscar
    T data;//datos genéricos encapsulados en cada nodo.
    std::vector<><em>> children;//nodos hijo, lista de punteros
    std::vector<></em>> parents;//nodos padre, lista de punteros
};

template<typename t=""> class DAG {//Clase para el grafo

std::vector<><t>*> Nodes;//Vector de punteros a nodo, así es como definimos un DAG;
}

}

Me preguntaba si es posible, utilizando plantillas, tener un vector de nodos que contenga nodos de múltiples tipos. Algo como esto.

std::vector<node*> Nodes = {node<int>*,node<string>*, ...}</node*>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como la clase node es una clase de plantilla, se puede instanciar para cualquier tipo T. Sin embargo, una vez instanciada, se convierte en una clase concreta con un tipo específico para la variable miembro data. Por lo tanto, un std::vector de nodes tendría que tener un tipo específico para su variable miembro data y no puede contener nodos de varios tipos.

    En otras palabras, la siguiente línea no se compilaría:

    std::vector<node*> Nodes = {node<int>*, node<string>*, ...}
    

    En su lugar, tendrías que usar un std::vector separado para cada tipo de node.</node*>

Comments are closed.