模板函數作為模板參數
在 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中文網其他相關文章!