在 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)>
{};
我们不能混合泛型方式类型、非类型和模板模板参数,因此 std::array
例如不处理。
如何在 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)>
{};
我们不能混合泛型方式类型、非类型和模板模板参数,因此 std::array
例如不处理。