El uso de impulso :: peso mosca struct dentro de T {} (es decir, contrapesos recursivos)
-
12-10-2019 - |
Pregunta
Estoy tratando de definir un archivo de la ruta tipo de valor inmutable, aprovechando impulso :: peso mosca de componentes de la ruta acción. Algo como esto:
struct filepath_data;
typedef boost::flyweight<filepath_data> filepath;
struct filepath_data {
boost::optional<filepath> parent;
std::string name;
};
Por supuesto, esto se parece a una estructura recursiva, pero en realidad no boost::flyweight<T>
(sí) contienen una copia de T
, sólo un identificador de un T
que puede ser consultado en el soporte adecuado, así que creo que esta estructura debe trabajo.
Por desgracia, no se compila, porque cuando g ++ golpea el typedef se queja de que filepath_data es incompleta.
Entonces, la pregunta es, ¿Puedo hacer uso de la flexibilidad y argumentos de plantilla más avanzados para boost::flyweight<>
para hacer este trabajo estructura, y si es así, ¿cómo?
Solución
Este ejemplo muestra cómo combinar Boost.Flyweight con un recursiva estructura de datos usando Boost.Variant y boost::recursive_wrapper
. Tal vez se puede utilizar un enfoque similar para su problema.