Add cpp_template_parameter_type

This commit is contained in:
Jonathan Müller 2017-01-30 16:56:36 +01:00
commit d089dd97b7
3 changed files with 53 additions and 0 deletions

View file

@ -78,6 +78,52 @@ namespace cppast
cpp_template_keyword keyword_;
};
/// \exclude
namespace detail
{
struct cpp_template_parameter_ref_predicate
{
bool operator()(const cpp_entity& e);
};
} // namespace detail
/// Reference to a [cppast::cpp_template_type_parameter]().
using cpp_template_type_parameter_ref =
basic_cpp_entity_ref<cpp_template_type_parameter,
detail::cpp_template_parameter_ref_predicate>;
/// A [cppast::cpp_type]() defined by a [cppast::cpp_template_type_parameter]().
class cpp_template_parameter_type final : public cpp_type
{
public:
/// \returns A newly created parameter type.
static std::unique_ptr<cpp_template_parameter_type> build(
cpp_template_type_parameter_ref parameter)
{
return std::unique_ptr<cpp_template_parameter_type>(
new cpp_template_parameter_type(std::move(parameter)));
}
/// \returns A reference to the [cppast::cpp_template_type_parameter]() this type refers to.
const cpp_template_type_parameter_ref& entity() const noexcept
{
return parameter_;
}
private:
cpp_template_parameter_type(cpp_template_type_parameter_ref parameter)
: parameter_(std::move(parameter))
{
}
cpp_type_kind do_get_kind() const noexcept override
{
return cpp_type_kind::template_parameter;
}
cpp_template_type_parameter_ref parameter_;
};
/// A [cppast::cpp_entity]() modelling a non-type template parameter.
class cpp_non_type_template_parameter final : public cpp_template_parameter,
public cpp_variable_base

View file

@ -27,6 +27,8 @@ namespace cppast
member_function,
member_object,
template_parameter,
unexposed,
};

View file

@ -35,6 +35,11 @@ cpp_entity_kind cpp_template_type_parameter::do_get_entity_kind() const noexcept
return cpp_entity_kind::template_type_parameter_t;
}
bool detail::cpp_template_parameter_ref_predicate::operator()(const cpp_entity& e)
{
return e.kind() == cpp_entity_kind::template_type_parameter_t;
}
std::unique_ptr<cpp_non_type_template_parameter> cpp_non_type_template_parameter::build(
const cpp_entity_index& idx, cpp_entity_id id, std::string name, std::unique_ptr<cpp_type> type,
bool is_variadic, std::unique_ptr<cpp_expression> default_value)