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中文網其他相關文章!