在 C++ 中获取模板类型的 'nested' 个模板参数

Get number of 'nested' template arguments of a template type in c++

如何在 C++ 中获取类型的 'nested' 个模板参数的数量?

我想写一个函数 GetNumberOfTypes<T>() returns T 的模板参数的数量:

constexpr int a = GetNumberOfTypes<int>(); //a == 0
constexpr int b = GetNumberOfTypes<std::vector<int>>(); //b == 1
constexpr int c = GetNumberOfTypes<std::tuple<int,int>>(); //c == 2

这能以某种方式实现吗?我搞砸了sizeof...,但我真的不知道我在做什么...

你可以(以某种方式)通过专业化来做到这一点:

template <typename T>
struct TemplateArity : std::integral_constant<std::size_t, 0>
{};

template <template <typename...> class C, typename ...Ts>
struct TemplateArity<C<Ts...>> : std::integral_constant<std::size_t, sizeof...(Ts)>
{};

Demo

我们不能混合泛型方式类型、非类型和模板模板参数,因此 std::array 例如不处理。