在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中文網其他相關文章!