- , , . , - , , .
pImpl idiom, "B" , .
"A" " ". - :
class A {
public:
void foo ();
void bar ();
};
class B : public A {
};
class ARestricted : private A {
public:
inline void foo () { A::foo (); };
};
. "ARestricted" "A" , "getter" "A" . , :
inline A & get_base_type_A_for_interface_usage_only () { return *this; }
, , , !
EDIT: xtofl "A" "AInternal" "Arestricted" "A" .
, , , "B" "A" . , AInternal , "B" "AInternal", "A" !
class AInternal {
public:
void foo ();
void bar ();
};
class A : private virtual AInternal {
public:
inline void foo () { A::foo (); };
};
class B : public virtual AInternal, public A {
public:
void useMembers ()
{
AInternal::foo ();
AInternal::bar ();
}
};
void func (A const &);
int main ()
{
A a;
func (a);
B b;
func (b);
}
, ! ... , , ?