gpt4 book ai didi

c++ - 如何使客户端无法访问 namespace 的功能

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:03 25 4
gpt4 key购买 nike

我正在编写一个包含在名为 csnamespace 中的类。我正在使用一个库,其中一个函数采用函数指针。该函数必须修改该类的一些 protected 成员,因此我在相同的 cs 命名空间中编写了一个自由函数,并使其成为该类的 友元函数。这样做使客户可以使用该功能。但是由于明显的原因,客户端必须无法访问该功能。

示例代码在这里:

#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;
}
}

最佳答案

如果你想让一个自由函数在另一个编译单元中不可访问,你可以使用嵌套 anonymous namespace :

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);
}
}

关于c++ - 如何使客户端无法访问 namespace 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55889451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com