C での自律的な self メンバー型の実装
PHP は、クラスの型に評価されるクラス内での self キーワードをサポートしています。ただし、C には同等のものがありません。
クラスごとにこの動作をシミュレートするには、単純な typedef を使用できます。
struct Foo { typedef Foo self; };
これは機能しますが、クラス名を明示的に指定する必要があります。サイレント エラーのリスク。
自律的な自己メンバー型付けを実現するには、decltype とfriends:
template <typename... Ts> class Self; template <typename X, typename... Ts> class Self<X, Ts...> : public Ts... { protected: typedef X self; }; #define WITH_SELF(X) X: public Self<X> #define WITH_SELF_DERIVED(X, ...) X: public Self<X, __VA_ARGS__>
これらのマクロを使用すると、self メンバーの型指定を簡単に実装できます:
class WITH_SELF(Foo) { void test() { self foo; } };
派生クラスの場合は、WITH_SELF_DERIVED を使用します:
class WITH_SELF_DERIVED(Bar, Foo) { /* ... */ };
Thisこのアプローチにより、クラス名を明示的に指定する必要がなくなるだけでなく、多重継承もサポートされます。
以上がC で自律的な「self」メンバー型を実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。