Il problema è stato discusso molte volte prima. Cosa fare se si ha la necessità:implementazione grafico/albero con tipi incompleti
struct Node
{
::std::vector<Node> nodes_;
};
Da here si ha l'impressione che (smart) puntatori a Node*
potrebbe essere la soluzione canonica. Ciò implica un'ulteriore indiretta e un corrispondente impatto sulle prestazioni. Da here, vediamo che libstdc++
supporta le istanze ::std::vector<T>
, dove T
è un tipo incompleto, ma non libc++
. Questo è difficilmente trasportabile. Ma una soluzione potrebbe essere un container di tipo portatile ::std::vector
che supporti tipi incompleti. Infine, possiamo fare:
template <::std::size_t I = 0>
struct Node
{
::std::vector<Node<I + 1> > nodes_;
};
template <>
struct Node<20>
{
};
che impone limitazioni sul nostro grafico/albero. Esistono soluzioni alternative aggiuntive, a causa del fatto che un Node
s contiene Node
s, ma è un tipo incompleto al punto di dichiarazione di ::std::vector<Node> nodes_;
?
C'è una biblioteca spinta per questo: http://www.boost.org/doc/libs/1_48_0/doc/html/container/containers_of_incomplete_types.html. – zch
@zch Rendi il tuo commento una risposta? Accetterò – user1095108