如何使客户端无法访问命名空间的函数

How do I make a function of a namespace inaccessible by the client side

本文关键字:命名空间 函数 访问 何使 客户端      更新时间:2023-10-16

我正在编写一个包装在名为 csnamespace中的类。我正在使用一个库,其中一个函数需要function pointer.该函数必须修改类的一些受保护成员,因此我在同一个cs命名空间中编写了一个自由函数,并使其成为该类的friend function。这样做使客户端可以使用该功能。但是由于明显的原因,该函数必须无法从客户端访问。

示例代码如下:

#include "lib.h"
namespace cs{
   class A
   {
     protected:
      int x;
      float y;
      friend int myFunc(void* userdata, int valInt, float valFloat);
     public:
      void abc()
      {
        libFunc(this, myFunc);
      }    
   };
   void myFunc(void *userdata, int x, float y){
       // I would like this function to be inaccessible from the client
       A *obj = (A*) userdata;
       obj->x = x;
       obj->y = y;
     }
}

如果你想让一个自由函数在另一个编译单元中无法访问,你可以使用嵌套的匿名命名空间:

namespace cs{
   class A
   {
     protected:
        //...
        friend int myFunc(int valInt, float valFloat);
     public:
        void abc();
   };
   namespace {  // anonymous nested namespace
        int myFunc(int x, float y){
           ...
     }
   }
   void A:: abc() {
        libFunc(this, myFunc);
   }    
}