Doxygen: интерпретировать шаблонный аргумент суперкласса - PullRequest
0 голосов
/ 24 апреля 2018

В этом коде, который соединен здесь для этого примера из нескольких файлов в разных библиотеках:

template <typename T1=void,typename T2=void,typename T3=void>
struct Implements ;

template <typename T1>
struct Implements<T1,void,void>
:   public virtual T1
{ } ;
template <typename T1,typename T2>
struct Implements<T1,T2,void>
:   public virtual T1
,   public virtual T2
{ } ;
template <typename T1,typename T2,typename T3>
struct Implements<T1,T2,T3>
:   public virtual T1
,   public virtual T2
,   public virtual T3
{ } ;

struct MySuper { } ;
struct MyClass : public Implements<MySuper> { } ;

Как мне узнать, что MySuper является суперклассом MyClass?

.

В настоящее время в списке классов он перечисляет T1, T2 и T3 в качестве суперкласса этого ... иногда. В других случаях он полностью игнорирует это.

Я использую doxygen версию 1.8.4 (хотя 1.8.14 не меняет это поведение).

Диаграмма классов в этом примере показывает, что реализации реализованы как [буквально] MySuper, T2 и T3. (Примечание: это также означает, что он не понимает частичную специализацию шаблона и аргументы по умолчанию.) В моем реальном коде он часто даже не показывает MySuper и вместо него показывает T1.

Вот разница между файлом doxygen -g и моим файлом:

28c28
< PROJECT_NAME           =
---
> PROJECT_NAME           = "MyLibrary"
41c41
< OUTPUT_DIRECTORY       =
---
> OUTPUT_DIRECTORY       = generated
173c173
< TAB_SIZE               = 8
---
> TAB_SIZE               = 4
530c530
< WARN_IF_UNDOCUMENTED   = YES
---
> WARN_IF_UNDOCUMENTED   = NO
571c571
< INPUT                  =
---
> INPUT                  = ../impl ../include
588c588
< FILE_PATTERNS          =
---
> FILE_PATTERNS          = *.c *.cpp *.cxx *.hxx *.hpp *.h *.dox
594c594
< RECURSIVE              = NO
---
> RECURSIVE              = YES
991c991
< GENERATE_LATEX         = YES
---
> GENERATE_LATEX         = NO
1308c1308
< GENERATE_TAGFILE       =
---
> GENERATE_TAGFILE       = generated/MyLibrary.tag

Класс Implements находится в MyLibrary, а код пользователя находится в другой библиотеке. У меня есть похожий докси для пользовательского проекта, который отличается в основном

TAGFILES = ../../MyLibrary/docs/generated/MyLibrary.tag=../../../../MyLibrary/docs/generated/html

И в этом случае он вообще не расширяет аргументы шаблона (дословно T1, T2 и T3 вместо 'MySuper', T2 и T3).

...