所以我试图在我的可变参数模板中获取一些元素,如下所示:
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/