假设我们的代码过于简单:
class A{
public:
template<typename T1, typename T2>
void work(T1 a, T2 b){
do_something1(a, b);
do_something2(a, b);
do_something3(a, b);
}
private:
template<typename T1, typename T2>
void do_something1(T1 a, T2 b);
template<typename T1, typename T2>
void do_something2(T1 a, T2 b);
template<typename T1, typename T2>
void do_something3(T1 a, T2 b);
};
所有函数do_somethingXX
都有相同或相似的模板参数,并且可能内部有一些样板代码。
但是,如果你像这样重构:
class A{
public:
template<typename T1, typename T2>
void work(T1 a, T2 b){
A_Processor<T1, T2> processor(a, b);
processor();
}
};
template<typename T1, typename T2>
class A_Processor{
public:
A_Processor(T1 &a, T2 &b) : a(a), b(b){}
operator()(){
do_something1();
do_something2();
do_something3();
}
private:
void do_something1();
void do_something2();
void do_something3();
private:
T1 &a;
T2 &b;
};
代码很清晰,样板消失了。编译器也会优化A_Processor
,因此A_Processor
是零成本抽象。
可以在不使用模板的情况下给出相同的示例。
这种设计模式吗?
第二个问题,如果A
是等级A
什么&#34;事情&#34; A_Processor
代表什么?