类的友元函数,只能由特定类使用

时间:2015-04-21 00:23:24

标签: c++ function class friend access-control

我有三个不同的班级ABC。我是否可以创建一个功能f,该功能可以访问A的私人成员,f仅可以B(而不是C)进行调用?

我正在寻找另一种方法,让班级B成为班级A的朋友。

2 个答案:

答案 0 :(得分:4)

不确定。使有问题的朋友函数作为private构造函数的参数类,其中B是唯一的friend。例如:

#include <iostream>

class A;
class B;

template <typename T>
class Arg {
    friend T; // only T can make Arg<T>
};

void foo(A& a, Arg<B> );  // only B can make a Arg<B>
                          // so foo is only callable by B

class B {
public:
    void bar(A& a) {       // public for demonstration purposes
        foo(a, Arg<B>{});  // but this can just as easily be private
    }
};

class A {
    friend void foo(A&, Arg<B>);   // foo can access A's internals
    int x;
public:
    void print() { std::cout << x << '\n'; }
};

void foo(A& a, Arg<B> ) { a.x = 42; }

int main() {
    A a;
    B b;
    b.bar(a);
    a.print();
}

foofriend A B只能由{{1}}使用。

答案 1 :(得分:0)

如果你完全符合朋友的功能,那么是的,你可以限制。这样的事情应该允许B而不是C。

class A
{
   private:
      int a;
      int b;

  friend int B::accessInternalsViaFriend();
}

class B
{
   .
   .
   .
   public:
      int accessInternalsViaFriend();
};