我對模板元編程相當陌生,並且一直在研究一些概念 - 但是,我遇到了這個特定片段,我一直被困住了。std :: enable_if作爲構造函數的單個參數
template<class TAG, typename... DATATYPES>
struct Message {
Message (typename std::enable_if<sizeof...(DATATYPES) >= 1>) {
}
... (various other constructor declarations here)
std::tuple<DATATYPES...> m_data;
};
讀它時,它被啓用默認的構造函數,如果有一個或更多類型的參數,但已經測試過所有我得到的是一個編譯錯誤我承擔了。
我希望在幫助我理解這段代碼時提供任何幫助,因爲我明白enable_if應該做什麼,但在這種情況下,我似乎無法將我的頭圍繞在實際發生的事情上。
編輯:我想這不是一個'我如何達到這個特殊效果?'的問題。並且更多地沿着'這段代碼實際產生了什麼,這與我所理解的原始作者的意圖相匹配嗎?'。
我沒有時間發佈完整的解決方案,但看看http://stackoverflow.com/questions/21901637/class-template-why-cant-i-specializea-a-單一方法爲void類型/ 21904225#21904225,相同的技術可以應用於您的問題,除了使用'IsVoid',而不是使用'IsVoid',您將基於arg類型的數量來定義。 –
作爲一個經驗法則,如果你在一個不是模板的函數中看到'enable_if'(即類模板的成員不計數),那就錯了。 –