![](/img/trans.png)
[英]Getting the sum of a variadic size_t… argument in a variadic template in C++
[英]How to get variable no of argument with its size in C++ using variadic template
我需要创建一个函数,它采用变量 no 参数。 此函数的目标是获取参数并打印数据。 我已经使用可变参数模板成功地实现了这个功能,其代码如下:
void print(T var1, Types... var2)
{
cout << "DATA:"<<var1<< endl ;
print(var2...) ;
}
但现在我也想打印参数的大小。 例如:
char empname[15+1];
print(empname);
它应该打印 empname 的大小:16。 但它打印 8,因为它打印模板参数的数据类型的大小。
由于我仍在学习 C++11 可变参数模板,因此有任何方法可以获取参数包中每个参数的大小。
我假设您正在尝试执行以下操作:
(下次请把你试过的完整代码放上来)
void print() {}
template <typename T, typename... Types>
void print(T var1, Types... var2)
{
cout << "SIZE:"<<sizeof(var1)<< endl ;
print(var2...) ;
}
当您尝试运行此命令时:
char empname[15+1];
print(empname);
你得到SIZE:8
这是char *
的大小。 数组在传递给函数参数时衰减为指针。 这是因为数组到指针衰减。
因此,如果您手动将模板参数指定为数组引用,则它可以正常工作。
char empname[15+1];
print<char (&)[16]>(empname);
然而,这可能不是你想要的。 为了防止衰减,您可以将参数类型更改为引用。 详细说明在这里。
template <typename T, typename... Types>
void print(T& var1, Types&... var2)
{
cout << "SIZE:"<<sizeof(var1)<< endl ;
print(var2...) ;
}
只是在@Hanjoung Lee 的回答中添加另一个示例,您还可以像这样获得数组的大小:
template <typename T, std::size_t Size, typename... Types>
void print(T (&)[Size], Types&... var2)
{
std::cout << "SIZE:" << Size << std::endl;
print(var2...);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.