簡體   English   中英

C ++中的嵌套類

[英]nested classes in c++

我的問題是您在實踐中真正使用嵌套類的次數有多少次? 嵌套類的真正力量是什么?沒有它們怎么辦? PS請不要解釋它是什么,我知道( from technical point of view

我通常使用嵌套類將查找器對象 (與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));

這當然可以在不使用嵌套類的情況下完成。 但是我發現它很優雅,因為查找器在類定義之外沒有用:

如果我曾經在代碼重構的情況下刪除了該類,那么查找程序也應該刪除。

由於以下原因,我很少使用它們:

  • 它們往往是我不希望在頭文件中包含的實現細節。
  • 我不喜歡這種語法。

有時我使用嵌入式結構(對於POD,沒有方法)。

當類需要包含分組/封裝的數據時,它們很有用。 您可以將它們全部設計成private嵌套類,以防止外界無意中使用數據類型。

它也可以用作達成友誼的一種更清晰的方式。 通過嵌套類而不是使用友誼,您可以進一步封裝代碼部分之間的friend關系。

我將它們用作需要訪問我的類的實用程序類:信號處理程序,計時器,尤其是在使用pimpl時,因此實現已在cpp文件中。
在C ++中,沒有嵌套類是無法完成的,但是這是一種很好的方式來限制這些類,這些類主要只是將事件分發給我的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM