如何迭代打包可變參數模板參數列表
在C 中,迭代打包可變參數模板參數列表會帶來挑戰,因為無法知道參數的數量並從中單獨檢索資料。在建構函數時使用巨集進一步加劇了這個問題,這阻止了遞歸呼叫。
為了解決這個問題,提供的解決方案採用了自訂類型any,它可以保存不同類型的資料。透過將此類型傳遞給可變參數模板,參數將擴展為任何物件的向量。隨後,可以使用專門的 getter 函數 (get
雖然此方法可以完成任務,但它確實需要詳細函數調用,例如 foo(arg(1000))。為了簡化這一點,我們尋求一種更簡潔的迭代方法或等效於 std::get() 的打包可變參數模板參數清單。
使用 STL 折疊表達式和 Lambda 的解決方案
對於 C 17 及更高版本,折疊表達式可以與 lambda 函數一起使用來實現迭代。 lambda 可以在循環內執行任意操作,包括遞增計數器並列印目前參數:
template
void Foo (Ts && ... inputs)
{
int i = 0;
([&]
{
// Do things in your "loop" lambda
i;
std::cout << "input " << i << " = " << inputs << std::endl;
} (), ...);
}
此方法提供了更簡潔易讀的迭代機制。
處理循環中斷的替代方案
雖然上述解決方案完成了任務,它缺乏在循環內實現中斷或返回的能力。為了解決這個問題,我們可以利用諸如以下的解決方法:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3