将多个函数声明为 class 的友元

Declare many functions as friends of a class

如何方便地将多个模板函数声明为一个模板的友元函数class?

示例:

template <typename T>
void funct1(MyClass<T> & A); //1.forward declaration.

template <typename T>
class MyClass{
    protected:
    T a;
    friend funct1(MyClass<T> & A); //2.declare friend
}
template <typename T>
void funct1(MyClass<T> & A){ //3.actual implementation
    ++A.a;
}

为许多功能中的每一个重复步骤 1、2、3....

是否可以将所有这些函数组合成某个东西,然后声明其中的所有东西都是模板的友元class?

是的!您可以使它们成为 classstatic 成员函数,并使 class 成为 friend 的成员函数。

template <typename T>
class MyClass{
    protected:
    T a;
    friend class MyFunctions;
}

一个朋友怎么样class,所有的功能都可以进入那个朋友class:

#include <iostream>

using namespace std;

template <typename T>
class MyFriend;

template <typename T>
class MyClass{
    protected:
      T a;
    public:
      MyClass(T _a):a(_a) {}

    friend MyFriend<T>;
};

template <typename T>
class MyFriend {
  public:
  void funct1(MyClass<T> &A) {
    ++A.a;
    cout << "A.a: " << A.a << endl;
  }

  void funct2(MyClass<T> &B) {
    B.a +=  2;
    cout << "A.a: " << B.a << endl;
  }

};

int main() {
  MyClass<int> myclass(0);
  MyFriend<int> myfriend;

  myfriend.funct1(myclass);
  myfriend.funct2(myclass);

  return 0;
}