簡體   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