El uso de impulso :: peso mosca struct dentro de T {} (es decir, contrapesos recursivos)

StackOverflow https://stackoverflow.com/questions/4509892

  •  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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top