C 语言中的 Self:自治实现
self 关键字在 PHP 等语言中广泛使用,对 C 语言提出了挑战,因为缺乏等效机制。虽然使用嵌套 typedef 的特定于类的实现很简单,但它需要重复并存在引入微妙错误的风险。本文探讨了一种使用 decltype 和模板来实现自主 self 实现的优雅解决方案。
使用 decltype 声明 Self
使用 decltype 引入 self 的最初尝试失败了,因为它尝试在实例之外访问它。为了解决这个问题,我们需要将 self 声明封装在模板中:
template <typename X, typename...Ts> class SelfBase<X,Ts...>: public Ts... { protected: typedef X self; };
此模板作为可以访问 self 的类型的基类。
便捷宏
为了让SelfBase的使用更加简单,两个宏是介绍:
示例
使用这些宏,我们现在可以使用 self 定义类:
class WITH_SELF(Foo) { void test() { self foo; // self is now available } }; // Multiple inheritance class WITH_SELF_DERIVED(Bar,Foo,Foo2) { /* ... */ };
结论
通过利用 decltype 和模板,可以在 C 中实现自治的 self 成员类型。这种方法允许在类中使用 self,而不存在由于错误的类重新定义而导致无声错误的风险。提供的方便宏使实现简单灵活,允许多个基类继承以及自我基类和常规基类的不同组合。
以上是我们如何在 C 中实现自主的'Self”关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!