Added handling of template template class template arguments

This commit is contained in:
Bartek Kryza
2021-03-06 21:15:04 +01:00
parent 25254fc81d
commit 77f24b5360
3 changed files with 21 additions and 4 deletions

View File

@@ -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:

View File

@@ -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;
};
}
}

View File

@@ -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);
}