首頁  >  文章  >  後端開發  >  如何在 C 語言的映射中儲存具有非齊次簽名的函數?

如何在 C 語言的映射中儲存具有非齊次簽名的函數?

Linda Hamilton
Linda Hamilton原創
2024-11-18 07:53:02200瀏覽

How Can You Store Functions with Non-Homogeneous Signatures in a Map in C  ?

在映射中儲存具有非齊次簽名的函數

問題介紹

在C 中,需要將具有不同簽名的函數與唯一的關聯起來是基於運行時參數的動態呼叫的標識符。然而,標準容器不直接支援非同質函數類型的儲存。

利用類型擦除和模板運算符

克服此限制的一種方法是類型擦除,其中涉及封裝函數將類型放入容器中,該容器會刪除特定類型信息。這允許統一儲存具有不同簽名的函數。為了促進這個過程,定義了一個自訂資料結構 AnyCallable:

AnyCallable 接受異質函數類型並提供通用的operator()來呼叫具有匹配參數的封裝函數。

範例實作

使用AnyCallable 資料結構,我們現在可以建立一個映射來儲存不同類型的函數簽章:

為了根據函數的唯一字串標識符動態呼叫函數,我們利用AnyCallable提供的operator():

這種方法確保型別安全和動態呼叫具有非同質簽章的函數,使其成為儲存和執行具有不同輸入的方法指標的通用解決方案。

以上是如何在 C 語言的映射中儲存具有非齊次簽名的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn