В этом коде, который соединен здесь для этого примера из нескольких файлов в разных библиотеках:
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
).