如何迭代打包可變參數模板參數列表
在C 中,迭代打包可變參數模板參數列表會帶來挑戰,因為無法知道參數的數量並從中單獨檢索資料。在建構函數時使用巨集進一步加劇了這個問題,這阻止了遞歸呼叫。
為了解決這個問題,提供的解決方案採用了自訂類型any,它可以保存不同類型的資料。透過將此類型傳遞給可變參數模板,參數將擴展為任何物件的向量。隨後,可以使用專門的 getter 函數 (get
雖然此方法可以完成任務,但它確實需要詳細函數調用,例如 foo(arg(1000))。為了簡化這一點,我們尋求一種更簡潔的迭代方法或等效於 std::get() 的打包可變參數模板參數清單。
使用 STL 折疊表達式和 Lambda 的解決方案
對於 C 17 及更高版本,折疊表達式可以與 lambda 函數一起使用來實現迭代。 lambda 可以在循環內執行任意操作,包括遞增計數器和列印目前參數:
<code class="cpp">template <class ... Ts> void Foo (Ts && ... inputs) { int i = 0; ([&] { // Do things in your "loop" lambda ++i; std::cout << "input " << i << " = " << inputs << std::endl; } (), ...); }</code>
此方法提供了更簡潔易讀的迭代機制。
替代方案處理循環中斷
雖然上述解決方案完成了任務,但它缺乏在循環內實現中斷或返回的能力。為了解決這個問題,我們可以利用以下的解決方法:
以上是我們如何簡潔地迭代打包的可變參數模板參數列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!