多対多の友情で2つのテンプレートクラスをリンクする方法は?
-
27-10-2019 - |
質問
次の2つのテンプレートクラスがあると仮定します: ジェネラコディセタグプレ
どうすれば多対多の友情でそれらをリンクできますか。たとえば、FirstにSecondのパラメータオブジェクトのbを出力するメソッドを追加します。
私の質問は明確ですか?
解決
ジェネラコディセタグプレ
これにより、すべてのFirst<T>
がすべてのSecond<U>
の内部にアクセスできるようになります。さて、これは技術的な解決策ですが、循環依存関係を持ち、内部を他のクラスのインスタンス化に開放する設計が、特定の問題に対する最善の解決策であるかどうかを検討することをお勧めします。
ところで、First<int>
にSecond<int>
へのアクセスのみを許可したい場合(Second<double>
ではない)、次のように行うことができます:
ジェネラコディセタグプレ
この2番目のバージョンでは、特定のインスタンス化と連携する前に、Second
テンプレートの前方宣言が必要ですが、これにより、特定のインスタンス化に対してのみクラスの内部へのアクセスを許可できます。
他のヒント
保護を理解していると仮定すると、テンプレートの前方宣言が問題になります: ジェネラコディセタグプレ
各クラスの宣言から始めることができます: ジェネラコディセタグプレ
これで、両方のクラスが定義内でもう一方のクラスについて認識できるようになります。必要に応じて、そこで友達として宣言できます。 ジェネラコディセタグプレ
逆も同じです。
お互いの詳細を確認する必要がある場合、つまり「前方宣言」コピーを使用できない場合は、クラス定義の下に関数本体を実装することもできます。
所属していません StackOverflow