我有一个这样声明的类:

namespace nsp1
{

 class A
 {
  public :
   inline friend void DoSomething();

  private :
   A();

   int a;
 };

}

这样,函数DoSomething()将位于 namespace nsp1中。
有没有一种方法可以声明此函数以使其具有内联好友和 namespace 之外的内容?

最佳答案

这是一个解决方案:

 namespace nsp1
{
    class A;
}

inline void DoSomething(const nsp1::A & a);
 namespace nsp1
{

 class A
 {
  public :
   inline friend void ::DoSomething(const nsp1::A & a);

  private :
   A();

   int a;
 };

}

inline void DoSomething(const nsp1::A & a)
{
     std::cout<<a.a<<std::endl;//a.a is private!
}

09-25 19:56