私は次の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;
/* */
};