首頁 > 後端開發 > C++ > 模板函數可以當作 C 中的模板參數傳遞嗎?

模板函數可以當作 C 中的模板參數傳遞嗎?

Mary-Kate Olsen
發布: 2024-11-02 18:44:02
原創
424 人瀏覽過

Can Template Functions Be Passed as Template Arguments in C  ?

模板函數作為模板參數

在 C 中,可以透過函數指標或模板來實現泛型程式設計。雖然模板確保內聯函數調用,但它們在處理泛型函數本身時面臨限制。

問題陳述

考慮以下程式碼:

<code class="cpp">void a(int) {
    // do something
}
void b(int) {
    // something else
}

template<void (*param)(int) >
void function() {
    param(123);
    param(456);
}</code>
登入後複製

雖然這個模板函數簡化了function1和function2之間的重複,但是當a和b本身是泛型時,就會出現問題:

<code class="cpp">template<typename T>
void a(T t) {
    // do something
}

template<typename T>
void b(T t) {
    // something else
}

template< ...param... > // ???
void function() {
    param<SomeType>(someobj);
    param<AnotherType>(someotherobj);
}</code>
登入後複製

解:模板模板參數

為了用泛型函數a 和b 定義泛型型函數,我們需要使用模板模板參數。但是,直接將這些函數作為類型傳遞是不可能的。因此,我們使用虛擬結構的解決方法:

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

template<typename T>
struct b {
    static void foo(T = T()) {}
};

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

透過將模板模板參數指定為虛擬結構 a 和 b,我們可以實例化模板函數並在函數內呼叫泛型 foo 方法。

以上是模板函數可以當作 C 中的模板參數傳遞嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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