c++ - 在c++中获取模板类型的 'nested'模板参数的数量

标签 c++ variadic-templates

如何获取 C++ 中类型的“嵌套”模板参数的数量?

我想写一个函数GetNumberOfTypes<T>()返回 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 不会被处理。

关于c++ - 在c++中获取模板类型的 'nested'模板参数的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090484/

相关文章:

c++ - 模板指针参数包

C++ 可变参数模板迭代 vector 并比较元素

c++ - 使用 std::initializer_list 构造函数而不产生歧义?

c++ - 抛出异常c++后内存泄漏

c++ - typedef 中的可变参数模板解包参数

c++ - 如何在 qt5 上绘制 QDialog 的插入符号/箭头底部

c++ - 安全地将字节写入流

c++ - 传递接受任意数量和类型参数的函数作为类模板参数

c++ - 将 gcc 与 Netbeans 一起使用

c++ - 从 QVariantList 获取字符串