あるオブジェクトの(参照型の)メンバーを初期化して、(別の型の)別のオブジェクトのプライベートメンバーを指すようにしたい。私friend
はプライベートメンバーへのアクセスを提供するために使用します。(少しお待ちください。なぜこれを行う必要があるのかをさらに詳しく説明します。)
以下は、私が始めようとしたコードの最低限のバージョンですが、明らかに機能しません。明らかに、私はこのコードAries a(t.Leo);
で参照を初期化しようとしているだけですが、これは内部main()
で行われるため、コンパイルされません。
friend
私はこことインターネット上で(とのトピックについてreference
)多くの投稿を調べましたが、それを解決する方法を見つけることができませんでした。どうすればこれを機能させることができますか、または参照を正しくバインドするために他にどのようなアプローチを試みることができますか?
class Aries;
class Taurus {
friend class Aries;
public:
void setLeo(int inLeo) {
Leo = inLeo;
}
private:
int Leo;
};
class Aries {
public:
Aries(const int& inCancer) : Cancer(inCancer) {}
private:
const int& Cancer;
};
int main() {
Taurus t;
Aries a(t.Leo); // Intention: initialize (bind) the Cancer member with t's Leo.
}
上記のプラクティスが疑わしいまたは悪いと見なされる理由を理解するのに十分なC++を知っていることに注意してください。
私は、テストベンチがC++で記述されているハードウェアシミュレーション環境での研究プロジェクトに取り組んでいます。プロジェクトの目的は、クラス(プライベート)メンバーを波形として表示することです。これを行う唯一の信頼できる方法は、「波形メーカー」クラスをfriend
テストベンチオブジェクトの1つとして作成し、それをプライベートメンバーに「ストーキング」させることです(reference
上記のように作成することにより)。このプロジェクトは20年分のレガシーコードで使用されるため、テストベンチでゲッターメソッドを提供する他の方法は実用的ではありません。