我的問題是你真的在你的練習中使用嵌套類多久?嵌套類的真正威力是什麼?沒有它們,什麼是不可能完成的? P.S.請不要解釋它是什麼,我知道它(from technical point of view
)在C++中的嵌套類
2
A
回答
6
我通常使用嵌套類嵌入發現者對象(與std::find_if
使用)到我的具體類型。
喜歡的東西:
// Dummy example
class Foo
{
public:
class finder
{
public:
finder(int value) : m_value(value) {};
bool operator()(const Foo& foo) { return (foo.m_int_value == value); }
private:
int m_value;
};
private:
int m_int_value;
friend class finder;
};
然後:
vector<Foo> foo_list;
vector<Foo>::iterator foo =
std::find_if(foo_list.begin(), foo_list.end(), Foo::finder(4));
這當然可以在不使用嵌套類來完成。但我覺得它很優雅,因爲取景器在類定義之外沒有用處:
如果我在代碼重構的情況下刪除了類,查找器也應該被刪除。
0
當一個類需要包含分組/封裝數據時,它們非常有用。你可以將它全部設計成嵌套類,以防止外界不小心使用數據類型。
它也可以作爲一種可能更清晰的方式來實現友誼。通過嵌套類而不是使用友誼,您可以進一步封裝代碼部分之間的關系。
1
我使用它們很少,原因如下:
- 他們往往是實現 細節,我不喜歡在 頭文件。
- 我不喜歡 語法。
有時我使用嵌入式結構(對於POD,沒有方法)。
0
我將它們用作需要訪問我的類的實用程序類:信號處理程序,定時器,特別是在使用pimpl時,因此實現已經存在於cpp文件中。
C++中沒有任何東西不能在沒有嵌套類的情況下完成,但它是限制這些類的一種很好的方法,這些類通常只是派發事件給我的類。
相關問題
- 1. 嵌套類在C++
- 2. 嵌套類C++
- 3. C++:嵌套類模板類
- 4. 用C嵌套類型/類++
- 5. 異常而decalaring在C#中嵌套類
- 6. 在c#中序列化嵌套類?
- 7. Ruby:類中的嵌套類與嵌套類中的嵌套相同?
- 8. 嵌套()在c + +
- 9. C# - HTML「嵌套表」類
- 10. C++:私人嵌套類型
- 11. 嵌套靜態類C#
- 12. C++嵌套類實例
- 13. C++嵌套類方法
- 14. C#嵌套類和繼承
- 15. C#嵌套類錯誤?
- 16. C++類和嵌套成員
- 17. C++等效的C#嵌套私有類
- 18. 嵌套類:從嵌套保護的類
- 19. 嵌套在類中的C++ 11枚舉類的縮寫語法?
- 20. 在C++中嵌套C結構的offsetof()
- 21. 在C和C++中的嵌套結構
- 22. C++中是否存在類似Java的靜態嵌套類?
- 23. 嵌套類在GDB
- 24. 重寫簡單的C#的嵌套類
- 25. 嵌套類或不嵌套類?
- 26. C中的嵌套結構
- 27. c中的嵌套結構
- 28. C中的嵌套函數?
- 29. C++中的嵌套繼承
- 30. 在C#中的通用類中獲取嵌套通用類的類型
@Yogesh:'Foo :: finder'也是一個函數對象。對於更復雜的測試,這可以比'boost :: bind'或類似的更具可讀性。 – 2010-10-04 13:15:08
@Yogesh Arora:這當然是一個簡化的例子,我自己使用'boost :: find'和'std :: mem_fun'很多。但是對於一些複雜的情況,我相信使用查找器對象會使我的代碼更易於閱讀和維護。我理解你的觀點,但我的答案是否真的值得投票?這不是我所說的根本錯誤。 – ereOn 2010-10-04 13:35:07
我沒有看到爲什麼這些必須是嵌套類的原因,這些可能也只是可以在cpp文件中聲明的小類,隱藏在客戶端在頭文件中看到的內容中。 – 2010-10-04 13:44:21