C での Self : 自律的な実装
PHP などの言語で広く使用されている self キーワードは、次の理由により C では課題を引き起こします。同等のメカニズムが存在しないこと。ネストされた typedef を使用したクラス固有の実装は簡単ですが、重複が必要になり、微妙なバグが発生する危険があります。この記事では、decltype とテンプレートを使用して自律的な self 実装を実現する洗練されたソリューションについて説明します。
decltype を使用した Self の宣言
decltype を使用して self を導入しようとする最初の試みは失敗します。インスタンスの外部でこれにアクセスしようとします。これを解決するには、テンプレート内で self 宣言をカプセル化する必要があります。
template <typename X, typename...Ts> class SelfBase<X,Ts...>: public Ts... { protected: typedef X self; };
このテンプレートは、self にアクセスできる型の基本クラスとして機能します。
コンビニエンス マクロ
SelfBase の使用を簡単にするために、次の 2 つのマクロを使用します。導入:
例
これらのマクロを使用して、self でクラスを定義できるようになりました。
class WITH_SELF(Foo) { void test() { self foo; // self is now available } }; // Multiple inheritance class WITH_SELF_DERIVED(Bar,Foo,Foo2) { /* ... */ };
結論
decltype とテンプレートを活用することで、 C で自律的な self メンバー型を実装することができます。このアプローチにより、クラスの再定義の誤りによるサイレントバグのリスクなしに、クラス内で self を使用できるようになります。提供された便利なマクロにより、実装が簡単かつ柔軟になり、複数の基本クラスの継承や、self と通常の基本クラスのさまざまな組み合わせが可能になります。
以上がC で自律的な「Self」キーワードを実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。