小编Arc*_*her的帖子

允许"朋友"类仅访问某些私有成员

假设我有三个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)

c++ friend

33
推荐指数
3
解决办法
2万
查看次数

(C++的未来版本)中是否有任何可以使这些事情变得现实的机制?

假设我有一些所谓的模板类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模板可以通过这样的方式实现,即它的用户可以将一些内存池挂钩到它,因此它给客户端的所有对象都来自该池吗?

c++ c++11

2
推荐指数
1
解决办法
158
查看次数

标签 统计

c++ ×2

c++11 ×1

friend ×1