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:
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
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:
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:
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:
Esto ignoraría las dos clases nombradas en los diagramas de colaboración, y no aparecerían en absoluto.
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:
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
: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…>