![](/img/trans.png)
[英]what the difference between sizeof..(typename) and sizeof..(parameter) in variadic template c++
[英]sizeof in variadic template c++
我需要知道可變參數模板的參數包中有多少個項目。
我的代碼:
#include <iostream>
using namespace std;
template <int... Entries>
struct StaticArray
{
int size = sizeof... (Entries);// line A
//int array[size] = {Entries...};// line B
};
int main()
{
StaticArray<1,2,3,4> sa;
cout << sa.size << endl;
return 0;
}
我在A行出現編譯錯誤。
如果將此行更改為
static const unsigned short int size = sizeof...(Arguments)
可以編譯。 我的第一個問題是為什么我需要“ static const unsigned short”進行編譯。 如您所見,我需要在數組中放入一個大小。 我的最終目標是能夠在主函數中打印該數組。
請幫忙。 謝謝..我的理想來自這個網站,但我不知道如何使它正常工作http://thenewcpp.wordpress.com/2011/11/23/variadic-templates-part-1-2/
根據評論,我認為這是g ++處理成員變量的新的類內初始化的錯誤。 如果將代碼更改為
template <int... Entries>
struct StaticArray
{
static const int size = sizeof...(Entries); // works fine
};
那么它將正常工作,因為它使用C ++ 03特殊情況來初始化類中的const常量成員。
同樣,如果您使用新的C ++ 11統一初始化語法,則它可以正常工作:
template <int... Entries>
struct StaticArray
{
int size{sizeof...(Entries)}; // no problem
};
我很確定分配表格在這里有效,因此我認為g ++(我的系統上為4.8.2)弄錯了。
(當然,大小不能在運行時更改,因此正確的聲明可能還是static constexpr std::size_t size
,避免出現此問題...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.