透過CRTP 實現靜態多態
為了消除與虛擬成員函數相關的效能開銷,C 提供了CRTP(奇怪的重複模板模式)。此技術有助於為類型層次結構建立靜態定義的接口,從而實現編譯時分派。
替代實作
可以透過兩種不同的方式來利用 CRTP :
1。靜態接口規範:
<code class="cpp">template <class Derived> struct base { void foo() { static_cast<Derived *>(this)->foo(); }; };</code>
2.編譯時接線:
<code class="cpp">template <class T> void bar(base<T> &obj) { obj.foo(); // static dispatch }</code>
用法示例:
使用這些方法,您可以建立一個具有編譯時類型推導的靜態分派介面:
<code class="cpp">struct not_derived_from_base { }; my_type my_instance; not_derived_from_base invalid_instance; bar(my_instance); // calls my_instance.foo() bar(invalid_instance); // compile error (incorrect overload deduction)</code>
以上是如何使用CRTP在C實現靜態多型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!