我有两种方法,它们的代码几乎相同,除了它们调用的两种方法(以及我可以轻松参数化的一些其他细节)。但是,这些方法调用具有相同的签名,所以我想我可以将它们概括为一个方法。
class A{
IApi* m_pApi;
void M1();
void M2();
public:
void DoThings();
}
void A::M1(){
int i;
bool b;
m_pApi->method1( &i, &b );
//Other stuff...
}
void A::M2(){
int i;
bool b;
m_pApi->method2( &i, &b );
//Other stuff...
}
void A::DoThings(){
M1();
M2();
}
我可以弄清楚如何“参数化”“其他东西”代码,但问题是对method1
and的调用method2
。我想我必须以std::bind
某种方式使用,但我不能做这样的事情......
void A::M( std::function<void(int*,bool*)> f ){
int i;
bool b;
f( &i, &b );
}
void A::DoThings(){
M( std::bind( ???, m_pApi ) ); //M1
M( std::bind( ???, m_pApi ) ); //M2
}
这里的问题是它m_pApi
不是一个具体的类(它是由一堆具体类实现的接口),所以我不确定我是否可以做通常&Class::Method
的事情。建议?