簡體   English   中英

重構:在子函數中委托友誼

[英]Refactoring : delegate friendship in sub-functions

我重構了一個代碼,其中 class 有一個朋友 function 做了很多事情。

class Foo
{
  friend void do_something(Foo& foo);
};

void do_something(Foo& foo)
{
  // More than 2000 lines of ugly code
}

我想將do_something的內容拆分成幾個小函數。 看起來像這樣的東西:

void do_something(Foo& foo)
{
  if(case_1) do_1(foo);
  else if(case_2) do_2(foo);
  else if(case_3) do_3(foo);
  //...
}

有沒有一種設計可以將友誼轉移到子功能do_x(Foo&)而不必在 class 或類似的東西中聲明它們來拆分代碼?

注:僅限C++11

注意:我不想把子函數寫成宏

我建議您創建一個類似的 class DoSomehting ,而不是將do_something作為 function 調用其他子函數。

然后你可以將這個 class 聲明為friend class DoSomehting; . 所以這些子函數可以是它的私有方法。 調用的方法 -- 可以是一個名為void DoSomehting::process(Foo& foo)的公共方法:

class Foo
{
  friend class DoSomething;
};

class DoSomething
{
public:
    void process(Foo& foo)
    { 
        if(case_1) do_1(foo);
        else if(case_2) do_2(foo);
        else if(case_3) do_3(foo);
        //...
    }  

private:
    void do_1(Foo& foo);
    void do_2(Foo& foo);
    void do_3(Foo& foo);
};

暫無
暫無

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

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