克服使用std::source_location 與可變參數模板函數的障礙
可變參數模板函數是C 20 中的一個強大功能,允許處理任意數量的參數。然而,將 std::source_location(一種捕獲呼叫上下文資訊的方法)與這些函數整合是一個挑戰。
與可變參數的衝突
可變參數必須駐留在函數簽章末尾,在合併 std::source_location 時造成障礙。
解決方案1:實現推導指南
可以透過引入來規避此問題轉換呼叫語法的推導指南:
<code class="cpp">template <typename... Ts> struct debug { debug(Ts&&... ts, const std::source_location& loc = std::source_location::current()); }; template <typename... Ts> debug(Ts&&...) -> debug<Ts...>;</code>
在此設定中,函數簽章保持不變,而推導指南彌補了差距:
<code class="cpp">int main() { debug(5, 'A', 3.14f, "foo"); // Call converted to debug<int, char, float, const char*> }</code>
此解決方案保留了優點std::source_location 並確保可變參數範本函數的無縫語法。
以上是如何在 C 20 中將 `std::source_location` 與可變參數模板函數一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!