首頁 > 後端開發 > C++ > 主體

如何在 C 中呼叫可變參數模板參數上的函數?

Patricia Arquette
發布: 2024-11-24 16:31:14
原創
289 人瀏覽過

How to Call Functions on Variadic Template Arguments in C  ?

在可變參數模板參數上呼叫函數

目標是實現一個print() 函數,它接受可變數量的參數並執行每個參數上的任意函數。這是理想的遞歸實現的緊湊替代方案,每個參數類型都有單獨的專門化。

C 17 解

在C 17 中,這可以使用摺疊式:

(f(args), ...);
登入後複製

此表達式擴充args 中的參數並對每個參數呼叫f()。如果f() 傳回帶有​​重載逗號運算子的對象,請使用:

((void)f(args), ...);
登入後複製

Pre-C 17 解

對於C 17 之前的C版本,一種常見的方法是使用列表初始值設定項來擴展參數:

{ print(Args)... }
登入後複製

但是, print() 傳回void,因此為了避免編譯錯誤,可以如下所示修改程式碼:

using expand_type = int[];
expand_type{ (print(Args), 0)... };
登入後複製

這適用於可變參數,但有一些注意事項需要考慮。為了讓此模式可重複使用,可以建立一個巨集:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
登入後複製

但是,為了防止重載逗號運算子的潛在問題,可以如下更新巨集:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), void(), 0)... }
登入後複製

Pre -C 17 解決方案可能還需要額外的考慮,以避免不必要的記憶體分配。

以上是如何在 C 中呼叫可變參數模板參數上的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板