Quão ruim é usar o ponteiro nulo na declaração std :: vector?

Eu tenho duas classes diferentes, como abaixo:

class text
{ };

class element
{ };

E eu quero armazená-los noclass node:

template <typename T>
class node
{
    T cargo;

    std::vector<void*> children;

    node(T cargo) : cargo(cargo)
    { };

    void add_child(T node)
    {
        this->children.push_back((void*) node);
    }
}

Então, eu chamaria o nó dessa maneira armazenando ambos,text eelement:

element div;
text msg;

node<element> wrapper(div);

wrapper.add_child(msg);

EDITAR: Para recuperar o conteúdo que eu usoT typedef type; e converter ponteiro nulo em(type*).

Sei que não é muito elegante nem funcional, mas simplesmente não consigo descobrir qual é a maneira correta de fazer isso. Então, diga-me se isso é praticamente aceitável e, se não for, como fazer isso da maneira correta.

Desde já, obrigado!

questionAnswers(6)

yourAnswerToTheQuestion