es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar gráficos de colaboración sin recursión CRTP con dot/Doxygen.

Estoy trabajando en Patrones de Plantilla Recurrente Curiosa (CRTP) y quiero generar diagramas de colaboración para las clases derivadas que tengo. Cuando ejecuto doxygen en mi proyecto, obtengo diagramas como estos:

enter image description here

Aquí he limitado la profundidad máxima del gráfico. Pero todavía no me gusta la repetición de la rama izquierda. ¿Es posible ignorar uno de estos nodos (objectivebarrier o objectivebarrier<objective_dense…>), o fusionarlos juntos?

Editar: Configuración de doxygen no predeterminada:

<h1>Diferencias con el archivo Doxyfile predeterminado 1.8.17</h1>

EXTRACT<em>ALL            = YES
RECURSIVE              = YES
UML</em>LOOK               = YES
TEMPLATE<em>RELATIONS     = YES
CALL</em>GRAPH             = YES
CALLER<em>GRAPH           = YES
DOT</em>CLEANUP            = NO

El siguiente ejemplo más simple:

template <typename Derived>
class A_
{
    void foo()
    {
        static_cast<Derived*>(this)->foo();
    }
};

class B_ : public A<em><B</em>>
{
    void foo()
    {
        // Código omitido
    }
};

Produce esto:

enter image description here

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible ignorar o fusionar nodos en los diagramas de colaboración de Doxygen. Doxygen proporciona dos opciones de configuración para lograr esto:

    1. COLLABORATION_IGNORE

      Esta opción toma una lista de clases y/o espacios de nombres que deben ser ignorados al generar los diagramas de colaboración. Por ejemplo:

      COLLABORATION_IGNORE = objective_barrier<derived>, objective_barrier<objective_dense...>
      

      Esto ignoraría las dos clases nombradas en los diagramas de colaboración, y no aparecerían en absoluto.

    2. COLLABORATION_NODE_STYLE

      Esta opción toma una lista de clases y/o espacios de nombres junto con su estilo de nodo deseado. Por ejemplo:

      COLLABORATION_NODE_STYLE = objective_barrier<derived>=solid, objective_barrier<objective_dense...>=dotted
      

      Esto establecería el estilo de nodo de las dos clases nombradas en los diagramas de colaboración como “solid” y “dotted” respectivamente. Esto se puede utilizar para distinguir visualmente un nodo de otro, o para agrupar nodos según se desee.

    Puede especificar estas opciones en el archivo de configuración de Doxygen (Doxyfile) utilizando la misma sintaxis mostrada anteriormente.

    En el ejemplo proporcionado, para ignorar los dos nodos, agregaría la siguiente línea a su archivo Doxyfile:

    COLLABORATION_IGNORE = objective_barrier<derived>, objective_barrier<objective_dense...>
    

    Esto resultaría en un diagrama de colaboración con solo un nodo, como se muestra:

    [![enter image description here][3]][3]</objective_dense…></objective_dense…></objective_dense…>

Comments are closed.