首页 >后端开发 >C++ >我们如何在 C 中实现自治的'self”成员类型?

我们如何在 C 中实现自治的'self”成员类型?

Susan Sarandon
Susan Sarandon原创
2024-12-05 11:31:11666浏览

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

在 C 中实现自治 self 成员类型

PHP 支持类中的 self 关键字,该关键字计算为类的类型。然而,C 缺乏等效的。

要模拟每个类的这种行为,可以使用一个简单的 typedef:

struct Foo
{
   typedef Foo self;
};

虽然这有效,但它需要显式指定类名,增加无提示错误的风险。

为了实现自主的自我成员输入,我们可以利用 decltype 和朋友:

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__>

通过使用这些宏,您可以毫不费力地实现自我成员类型:

class WITH_SELF(Foo)
{
    void test()
    {
        self foo;
    }
};

对于派生类,使用WITH_SELF_DERIVED:

class WITH_SELF_DERIVED(Bar, Foo)
{
    /* ... */
};

这个方法不仅不需要显式指定类名,而且还支持多重继承。

以上是我们如何在 C 中实现自治的'self”成员类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn