C++ 获取可变参数模板中的多个元素

标签 c++ templates variadic

所以我试图在我的可变参数模板中获取一些元素,如下所示:

Test(const T& t...);

template<typename T>
inline Class<T>::Test(const T& t...){
     int num = sizeof...(t);
     ...
}

但是它无法编译,并且出现以下错误:

error C3523: 'sizeof...' requires as its argument an unexpanded parameter pack

't' is not a valid operand for 'sizeof...'. Did you mean to use 'sizeof'?

获取t...中参数数量的正确方法是什么?

最佳答案

尝试std::tuple元编程:std::tuple_size<std::tuple<Types...>>::value产生类型参数的数量。例如,此代码打印 4 :

#include <iostream>
#include <tuple>
#include <cstddef>

template<typename ...Types>
constexpr std::size_t Test(Types&& ... args){
    constexpr std::size_t sz = std::tuple_size<std::tuple<Types...>>::value;
    return sz;
}

int main()
{
    std::size_t val = Test(0, 0L, 'a', std::cin);
    std::cout << val;
}

关于C++ 获取可变参数模板中的多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732158/

相关文章:

c++ - 如何防止构造函数中的 bool 到 int 转换?

c++ - 在 Visual Studio 2005 C++ 中设置文件版本号

javascript - Backbone js。如何在backbone js中将数据从 View 传递到模板

c++ - 如何替换给定类型中的模板参数?

c++ Variadic Macro编译错误

C++ 可变参数函数模板

c++ - 以 float 作为非类型的模板特化

c++ - 主窗口应该是全局变量吗?

javascript - meteor :在单独的列表标签中显示 mongo 数组中的每个项目

c - 将参数动态传递给可变函数