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

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

Susan Sarandon
リリース: 2024-12-05 11:31:11
オリジナル
677 人が閲覧しました

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

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