迭代可變參數範本參數清單
打包可變參數範本參數清單雖然功能強大,但可能會給存取單一參數帶來挑戰。當需要迭代此類清單以根據其類型分隔參數時,此問題尤其相關。
要實現此目的,一種選擇是利用 C 17 中引入的折疊表達式。在這種情況下,使用 lambda 表達式,可以定義一個循環來迭代參數並執行所需的操作。
這是一個範例:
<code class="cpp">#include <iostream> template <class ... Ts> void Foo(Ts && ... inputs) { int i = 0; // Lambda that executes for each passed argument. ([&] { ++i; std::cout << "input " << i << " = " << inputs << std::endl; }(), ...); } int main() { Foo(2, 3, 4u, (int64_t)9, 'a', 2.3); return 0; }</code>
在這個範例中,lambda 非常簡潔,但可以在循環內執行更複雜的操作。需要注意的是,此技術需要 C 17 或更高版本。
對於需要返回或中斷迭代的場景,可以使用 try/throw 和variable/if 切換方法,但應將其視為代碼異味和僅在不可避免時使用。
以上是如何在 C 中迭代可變參數模板參數列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!