假设我有三个C++类FooA,FooB和FooC.
FooA有一个名为的成员函数Hello
,我想在类FooB中调用这个函数,但我不希望类FooC能够调用它.我能想出来实现这一点的最好方法是将FooB声明为FooA的朋友类.但只要我这样做,所有 FooA的私人和受保护成员都将被曝光,这对我来说是非常不可接受的.
所以,我想知道C++(03或11)中是否有任何机制比friend
类可以解决这个难题更好.
我认为如果可以使用以下语法会很好:
class FooA
{
private friend class FooB:
void Hello();
void Hello2();
private:
void Hello3();
int m_iData;
};
class FooB
{
void fun()
{
FooA objA;
objA.Hello() // right
objA.Hello2() // right
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
class FooC
{
void fun()
{
FooA objA;
objA.Hello() // compile error
objA.Hello2() // compile error
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
} …
Run Code Online (Sandbox Code Playgroud) 假设我有一些所谓的模板类friendly_point
,并呼吁用户定义的类foo
,并且foo
具有一定的构造不同ARG数量和类型,例如foo()
,foo(int)
和foo(int, char *)
.
我想知道是否有任何方法来实现friendly_point
模板,以便我可以像这样编写客户端代码:
friendly_point<foo> obj1;
friendly_point<foo> obj2(1);
friendly_point<foo> obj3(1,"abc");
Run Code Online (Sandbox Code Playgroud)
更重要的是,friendly_point
模板可以通过这样的方式实现,即它的用户可以将一些内存池挂钩到它,因此它给客户端的所有对象都来自该池吗?