![](/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.