繁体   English   中英

如何使用可变参数模板在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM