私は、これと同じような状況に遭遇するいくつかのコード、に取り組んでいます:Foo
のコンストラクタ以外のいずれかへのアクセスを必要としないBar
ので、私は、ないFoo
のfriend
としてBar
を持っていることを好むだろうプライベートコンストラクタには、友人なしでアクセスできますか?
struct Bar;
struct Foo{
friend struct Bar;
private:
Foo(){}
void f(){}
void g(){}
};
struct Bar {
Foo* f;
Bar() { f = new Foo();}
~Bar() { delete f;}
};
int main(){
Bar b;
}
をFoo
のプライベートメソッド(したがって、アクセスする必要はありません)。 Bar
さんにはFoo
さんを友達にしたことがないように許可する方法がありますか?
PS:質問が100%明確でない可能性があることを認識しました。友人かどうかにかかわらず、Bar
がすべて私的な方法にアクセスできるという事実(普通はfriends
の場合です)が、私が避けたいものです。幸いなことに、これまでに与えられた答えのどれも、その厄介な処方に問題はなかった。このクラスは、それが選択された関係者と共有して喜んだの秘密を仲介します弁護士を宣言し、コードで
struct Bar;
struct Foo {
friend struct FooAttorney;
private:
Foo(){}
void f(){}
void g(){}
};
class FooAttorney {
static Foo* makeFoo() { return new Foo; }
friend struct Bar;
};
struct Bar {
Foo* f;
Bar() { f = FooAttorney::makeFoo();}
~Bar() { delete f;}
};
int main(){
Bar b;
}
は生命のファッションを模倣:
"No But But ..."というコメントを素敵な答えに変えてくれてありがとう。私はすでにコンストラクタのためにそれを使用できない理由があったことを恐れていた – user463035818
@ tobi303恐怖を残して申し訳ありません。コメントしてから2秒後、私はあなたのコメントにコメントに答えようとしていることに気付きました。 – StoryTeller