2010-09-02 65 views
11

我只是想知道是否有任何在C++ 0x標準庫已經可以計算參數包中的參數數量?我想擺脫下面代碼中的field_count。我知道我可以構建自己的計數器,但是看起來這似乎是一個明顯的事情,包含在C++ 0x std lib中,我想確保它不在那裏:)本土計數器實現也是最受歡迎的。參數包中的參數計數?是否有一個C++ 0x std lib函數?

template<const int field_count, typename... Args> struct Entity { 
    const tuple<Args...> data; 
    const array<const char*, field_count> source_names; 

    Entity() : data() { 
    } 
}; 
+1

複製的[?如何找到一個參數包的長度(http://stackoverflow.com/questions/2770474/如何找到長度的參數包)我知道我已經從這裏的答案瞭解了'sizeof ...'...... – 2010-09-02 19:28:50

+0

在發佈這個問題之前,我實際上閱讀了那篇文章,但基於在我所做的粗略閱讀中,我不確定他們是否獲取了參數的實際數量與所有參數的總大小。大聲笑,我更喜歡我的問題,它對我來說更加清晰:) – 2010-09-02 20:56:01

回答

27

是的,您可以使用sizeof...。從C++ 0x FCD(§5.3.3/ 5):

sizeof...表達式中的標識符應命名參數包。運算符sizeof...產生爲參數包標識符提供的參數的數目。參數包由sizeof...運算符擴展(14.5.3)。 [實施例

template<class... Types> 
struct count { 
    static const std::size_t value = sizeof...(Types); 
}; 

- 端示例]

+0

我喜歡以這種方式使用sizeof,但現在我很好奇/謹慎。通常我希望sizeof返回字節數,但是在這裏它解包併爲我計算參數。對於一個數組,典型的sizeof會給我數組的字節大小。是否有任何人需要警惕使用sizeof ...的「陷阱」? 我不夠專業的w/C++在這一點上看到,但有一點關於我使用sizeof計算的事情,而不是以字節的實際大小。我只是在語義上偏執狂?大聲笑。 – 2010-09-02 16:50:22

+0

@pheadbaq:只能在參數包中使用'sizeof ...',並且它總是返回包中的參數個數。我認爲在使用中沒有太多的錯誤空間,但我明白你的意思。就個人而言,我認爲'sizeof ...'是對'sizeof'關鍵字的一種荒謬的濫用,但是,我不寫這種語言,我只是使用它。 :-) – 2010-09-02 17:01:32

+8

請注意'sizeof ...(Types)'和'sizeof(Types)...'的區別。後者是計算字節數,前者是計數類型:) – 2010-09-02 23:26:34

3

這裏的a link可能會幫助你。鏈接示例源:

template<typename... Args> struct count; 

template<> 
struct count<> { 
    static const int value = 0; 
}; 

template<typename T, typename... Args> 
struct count<T, Args...> { 
    static const int value = 1 + count<Args...>::value; 
}; 
+0

鏈接不再有效,爲什麼你要爲計數添加1? – 2018-01-15 13:25:35

相關問題