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;
|
ret = CXChildVisit_Continue;
|
||||||
} break;
|
} break;
|
||||||
case CXCursor_TemplateTemplateParameter:
|
case CXCursor_TemplateTemplateParameter: {
|
||||||
spdlog::info(
|
spdlog::info("Found template template parameter: {}: {}",
|
||||||
"Found template template parameter: {}", cursor.spelling());
|
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;
|
ret = CXChildVisit_Continue;
|
||||||
break;
|
} break;
|
||||||
case CXCursor_CXXMethod:
|
case CXCursor_CXXMethod:
|
||||||
case CXCursor_Constructor:
|
case CXCursor_Constructor:
|
||||||
case CXCursor_Destructor:
|
case CXCursor_Destructor:
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace clanguml {
|
|||||||
namespace t00008 {
|
namespace t00008 {
|
||||||
|
|
||||||
using CMP = bool (*)(const int, const int);
|
using CMP = bool (*)(const int, const int);
|
||||||
|
|
||||||
template <typename T, typename P = T, CMP = nullptr, int N = 3> class A {
|
template <typename T, typename P = T, CMP = nullptr, int N = 3> class A {
|
||||||
public:
|
public:
|
||||||
T value;
|
T value;
|
||||||
@@ -15,5 +16,10 @@ public:
|
|||||||
|
|
||||||
CMP comparator;
|
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("std::array<int, N> ints")));
|
||||||
REQUIRE_THAT(puml, IsField(Public("bool (*)(int, int) comparator")));
|
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(
|
save_puml(
|
||||||
"./" + config.output_directory + "/" + diagram->name + ".puml", puml);
|
"./" + config.output_directory + "/" + diagram->name + ".puml", puml);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user