首頁 > 後端開發 > C++ > 如何使用CRTP在C實現靜態多型?

如何使用CRTP在C實現靜態多型?

Patricia Arquette
發布: 2024-10-28 20:33:30
原創
229 人瀏覽過

  How Can CRTP Be Used to Achieve Static Polymorphism in C  ?

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

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