簡體   English   中英

可變參數模板c中的sizeof

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM