在C 語言中,如何利用模板函數作為模板參數來實現代碼重用維護通用功能,特別是當涉及的函數本身也是模板時?
要解決此問題,請使用模板模板參數。主要概念是模板參數不能直接包含模板模板函數,因為需要事先實例化。解決方法包括使用虛擬結構來封裝範本函數:
<code class="cpp">template <typename T> struct a { static void foo(T = T()) {} }; template <typename T> struct b { static void foo(T = T()) {} }; struct SomeObj {}; struct SomeOtherObj {}; template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); } int main() { function<a>(); function<b>(); }</code>
在此範例中,結構 a 和 b 實作 foo 方法的範本函數。函數模板採用模板模板參數,讓我們可以將 a 和 b 模板作為參數傳遞。在函數內,建立虛擬結構的特定實例,從而可以使用不同的參數類型來呼叫 foo。
以上是C 中如何將模板函數當作模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!