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

A friend function of a class that can only be used by a specific class

我有三个不同的 classes ABC。我可以创建一个函数 f,它可以访问 A 的私有成员并且 f 只能由 B 调用(而不是由 C 调用)吗?

我正在寻找让 class B 成为 class A 朋友的替代方法。

当然可以。使有问题的友元函数将 class 与 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();
}

fooAfriend,只能由 B 使用。

如果你完全限定好友功能,那么是的,你可以限制。像这样的东西应该允许 B 而不是 C。

class A
{
   private:
      int a;
      int b;

  friend int B::accessInternalsViaFriend();
}

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