我的問題是你真的在你的練習中使用嵌套類多久?嵌套類的真正威力是什麼?沒有它們,什麼是不可能完成的? 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. Scala中的C++嵌套類
- 3. 嵌套類C#
- 4. C#嵌套類
- 5. C++嵌套類
- 6. 嵌套類C++
- 7. 在構造嵌套類(C++)
- 8. 用C嵌套類型/類++
- 9. C++:嵌套類模板類
- 10. 在C#中引用嵌套類對象
- 11. 異常而decalaring在C#中嵌套類
- 12. 在c#中序列化嵌套類?
- 13. 如何在C++中使用嵌套類?
- 14. Ruby:類中的嵌套類與嵌套類中的嵌套相同?
- 15. C++中的嵌套/遞歸類
- 16. C++中的嵌套類不工作
- 17. C#中的.NET XmlSerializer和嵌套類#
- 18. 嵌套類中的友誼C++
- 19. c#和類中的嵌套枚舉
- 20. C#反射PropertyInfo MVC中的嵌套類
- 21. 嵌套()在c + +
- 22. 在嵌套類
- 23. C#嵌套類和繼承
- 24. 嵌套類崩潰C++
- 25. C++嵌套類實例
- 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