En utilisant boost :: poids mouche T {l'intérieur struct} (c.-à-masselottes récursives)
-
12-10-2019 - |
Question
Je suis en train de définir un type de valeur de chemin de fichier immuable, en profitant de boost :: poids mouche aux composants de chemin de partage. Quelque chose comme ceci:
struct filepath_data;
typedef boost::flyweight<filepath_data> filepath;
struct filepath_data {
boost::optional<filepath> parent;
std::string name;
};
Bien sûr, cela ressemble à une structure récursive, mais boost::flyweight<T>
ne fait pas (lui-même) contient une copie de T
, juste une poignée à une T
qui peut être regardé dans le support approprié, donc je pense que cette structure devrait travail.
Malheureusement, il ne compile pas, parce que quand g ++ frappe le typedef, il se plaint que filepath_data est incomplète.
Alors, la question est, puis-je utiliser la flexibilité et les arguments de modèle plus avancés pour boost::flyweight<>
pour faire ce travail de la structure, et si oui, comment?
La solution
spectacles de cet exemple comment combiner Boost.Flyweight avec une récursif la structure des données en utilisant Boost.Variant et boost::recursive_wrapper
. Peut-être vous pouvez utiliser une approche similaire pour votre problème.