0

私のクラスでは: クラスのプライベート メンバーを引数として持つパブリック関数を作成したいと考えています。そして、この関数をクラスの外から呼び出すことができます。

そんな感じ:

class MailToTerm
{
    public:
        MailToTerm();
        int getPrivMax(intWithMax priv) {return priv.getMax();} //my public function
        void initPrivMax(intWithMax priv) {return priv.initMax();}
        void getMutexObjPriv(intWithMax priv) {return priv.GetMutexObj();}
        void relMutexObjPriv(intWithMax priv) {return priv.RelMutexObj();}

    private:
        intWithMax cnter_multi_busy ;
        intWithMax cnter_mono_busy ;
        intWithMax cnter_light_busy ;
}

int main(){
    MailToTerm* pt_MailToTerm = new MailToTerm();
    int multi = pt_MailToTerm->getPrivMax(MailToTerm::cnter_multi_busy);
    int mono=   pt_MailToTerm->getPrivMax(MailToTerm::cnter_mono_busy);
}

cter_multi_busy が「プライベート」と見なされて機能しないため、アクセスできません。どうすればいいですか?

4

5 に答える 5

1

メンバーをパブリックにするか、元の関数を呼び出してプライベート メンバーを渡すパブリック ラッパー関数を作成することができます。

于 2013-04-23T15:18:07.080 に答える
1

したがって、メンバー変数で何かを行う関数が必要ですが、引数でどれを指定するかを指定したいとします。私の解決策は、配列を使用することです:

class MailToTerm
{
    public:
        enum MemberIndex {
            CNTER_MULTI_BUSY = 0,
            CNTER_MONO_BUSY = 1
        };

        MailToTerm();
        int getPrivMax(MemberIndex index) {return cnter_busy[(int) index].getMax();}

    private:
        intWithMax cnter_busy[2];
};

次に、次のように呼び出します。

pt_MailToTerm->getPrivMax(MailToTerm::CNTER_MULTI_BUSY);
于 2013-04-23T15:26:37.583 に答える