重构:在子函数中委托友谊
Refactoring : delegate friendship in sub-functions
我重构了一个代码,其中 class 有一个友元函数可以做很多事情。
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
注:我不想把子函数写成宏
与其将 do_something
作为调用其他 sub-functions 的函数,我建议您创建一个类似的 class DoSomehting
.
那么您可以将此 class 声明为与 friend class DoSomehting;
的好友。所以这些 sub-functions 可能是它的私有方法。调用的方法 -- 可以是一个 public 方法,例如命名为像 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);
};
我重构了一个代码,其中 class 有一个友元函数可以做很多事情。
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
注:我不想把子函数写成宏
与其将 do_something
作为调用其他 sub-functions 的函数,我建议您创建一个类似的 class DoSomehting
.
那么您可以将此 class 声明为与 friend class DoSomehting;
的好友。所以这些 sub-functions 可能是它的私有方法。调用的方法 -- 可以是一个 public 方法,例如命名为像 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);
};