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

如何使用模板模板參數建立具有多種實現的泛型函數?

DDD
發布: 2024-11-03 05:54:30
原創
364 人瀏覽過

How can Template Template Parameters be Used to Create Generic Functions with Multiple Implementations?

在C 中使用模板模板參數

考慮一個場景,您有多個函數,例如a() 和b(),使用不同的內部實作執行類似的任務。為了避免程式碼冗餘,您可以使用模板建立通用函數。但是,如果 a() 和 b() 本身是泛型的,則將外部函數實作為模板可能還不夠。

在這種情況下,您可以訴諸模板模板參數。雖然模板通常接受類型、模板類型參數或值,但您無法直接將模板模板函數作為類型傳遞,因為它需要實例化。

要克服這個問題,您可以使用涉及虛擬結構的解決方法:

<code class="cpp">template <typename T>
struct a {
    static void foo() {}
};

template <typename T>
struct b {
    static void foo() {}
};</code>
登入後複製

這些結構充當模板模板參數的佔位符。函數本身變成:

<code class="cpp">template <template <typename P> class T>
void function() {
    T<SomeObj>::foo();
    T<SomeOtherObj>::foo();
}</code>
登入後複製

現在,您可以透過傳遞適當的虛擬結構模板來將泛型函數與foo() 的不同實作一起使用:

<code class="cpp">int main() {
    function<a>();
    function<b>();
}</code>
登入後複製

雖然函數指標提供了在這個特定場景中,模板參數提供了更簡單的解決方案,為需要具有多種實現的通用功能的問題提供了更通用的解決方案。

以上是如何使用模板模板參數建立具有多種實現的泛型函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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