私は次の2つのクラスを持っています:
class A{
enum ee{a = 1, b = 2 , c = 3};
};
class B{
/*
*/
};
クラスBで列挙型eeを使用したいのですが、クラスAで列挙型eeを友達にする方法は?\
私は次の2つのクラスを持っています:
class A{
enum ee{a = 1, b = 2 , c = 3};
};
class B{
/*
*/
};
クラスBで列挙型eeを使用したいのですが、クラスAで列挙型eeを友達にする方法は?\
このアプローチを使用して、より選択的にアクセスを制限できます。
class B;
class A {
class inner {
enum ee {a = 1, b = 2 , c = 3};
friend class B;
};
public:
typedef inner exposed;
};
class B {
void f() {
const A::exposed::ee e(A::exposed::a);
}
};
これにより、wrt アクセスをより具体的にしたい/必要な場合に、他のオプションよりも制限が導入されます。
具体的には、このアプローチAを使用するのに友達である必要はなく、指定したようBに宣言A::innerが制限されています。A::innerその後、その宣言をプライベートに保ち、フレンドシップ経由でアクセスできるようにします。クライアントは を宣言できますがinner( 経由でアクセスA::exposed)、列挙型と定数が非公開の場合、クライアントにとっては実用的ではありません。
列挙型メンバーはそのスコープ内で公開されているため、列挙型を「フレンド」にすることはできません。「フレンドシップ」には、何かのプライベート メンバーを公開することが含まれます。したがって、この場合は友達になる必要がありますclass A。
言い換えると:
class A {
enum ee {a = 1, b = 2, c = 3};
friend class B;
};
は、プライベートにenum A::eeからアクセスできるようにしclass Bます。
たとえば、次のようになります。
class B {
void somefunc() {
enum A::ee v = A::a;
}
}
列挙型を のパブリック セクションに配置するAと、それを として参照できA::ee、値をA::a、A::b、およびとして参照できます。A::c.
class A
{
public:
enum ee {a = 1, b = 2 , c = 3};
};
class B
{
A::ee an_enum;
/* */
};