3

呼び出す 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。提案?

4

1 に答える 1