在 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中文网其他相关文章!