呼び出す 2 つのメソッド (および簡単にパラメーター化できるその他の詳細) を除いて、ほぼ同じコードを持つ 2 つのメソッドがあります。ただし、これらのメソッド呼び出しは同じシグネチャを持っているため、1 つのメソッドに一般化できると思います。
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
です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
。提案?