Added handling of template template class template arguments
This commit is contained in:
@@ -305,11 +305,18 @@ static enum CXChildVisitResult class_visitor(
|
||||
|
||||
ret = CXChildVisit_Continue;
|
||||
} break;
|
||||
case CXCursor_TemplateTemplateParameter:
|
||||
spdlog::info(
|
||||
"Found template template parameter: {}", cursor.spelling());
|
||||
case CXCursor_TemplateTemplateParameter: {
|
||||
spdlog::info("Found template template parameter: {}: {}",
|
||||
cursor.spelling(), cursor.type());
|
||||
|
||||
class_template ct;
|
||||
ct.type = "";
|
||||
ct.name = cursor.spelling() + "<>";
|
||||
ct.default_value = "";
|
||||
ctx->element.templates.emplace_back(std::move(ct));
|
||||
|
||||
ret = CXChildVisit_Continue;
|
||||
break;
|
||||
} break;
|
||||
case CXCursor_CXXMethod:
|
||||
case CXCursor_Constructor:
|
||||
case CXCursor_Destructor:
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace clanguml {
|
||||
namespace t00008 {
|
||||
|
||||
using CMP = bool (*)(const int, const int);
|
||||
|
||||
template <typename T, typename P = T, CMP = nullptr, int N = 3> class A {
|
||||
public:
|
||||
T value;
|
||||
@@ -15,5 +16,10 @@ public:
|
||||
|
||||
CMP comparator;
|
||||
};
|
||||
|
||||
template <typename T, template <typename> typename C> class B {
|
||||
public:
|
||||
C<T> template_template;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,10 @@ TEST_CASE("Test t00008", "[unit-test]")
|
||||
REQUIRE_THAT(puml, IsField(Public("std::array<int, N> ints")));
|
||||
REQUIRE_THAT(puml, IsField(Public("bool (*)(int, int) comparator")));
|
||||
|
||||
REQUIRE_THAT(puml, IsClassTemplate("B", "T, C<>"));
|
||||
|
||||
REQUIRE_THAT(puml, IsField(Public("C<T> template_template")));
|
||||
|
||||
save_puml(
|
||||
"./" + config.output_directory + "/" + diagram->name + ".puml", puml);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user