CRTP を使用して C で静的ポリモーフィズムを実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-28 20:33:30
オリジナル
205 人が閲覧しました

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

CRTP による静的ポリモーフィズム

仮想メンバー関数に関連するパフォーマンスのオーバーヘッドを排除するために、C は CRTP (Curiously Recurring Template Pattern) を提供しています。この手法により、型の階層に対して静的に定義されたインターフェイスの作成が容易になり、コンパイル時のディスパッチが可能になります。

代替実装

CRTP は 2 つの異なる方法で活用できます。 :

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート