ホームページ >バックエンド開発 >C++ >C で自律的な「self」メンバー型を実装するにはどうすればよいでしょうか?

C で自律的な「self」メンバー型を実装するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 11:31:11653ブラウズ

How Can We Implement an Autonomous `self` Member Type in C  ?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。