我使用函数指针解决了一个问题,我对解决方案有点担心,需要建议。
我的项目中有几个类实现了一个内存表,一个本地数据结构,它将一些数据保存在内存中。
所有函数都是私有的,因此除了类本身之外,没有其他正文可以使用它自己的函数来使用/修改数据。
最近我有一个要求,我必须在不同的模块中使用这些数据。因为我不想将私有函数设置为public,所以我在应用程序启动时将所有类的函数指针(所需函数的函数)存储在std:map中。后来我只需通过这些指针调用函数,无论我需要修改特定类的数据。
我想知道这是否正确?使用函数指针在不同的类中调用类的私有函数?
下面的代码有点模拟了我试图实现的内容:
typedef struct
{
void (*pfnDisplay)(void);
}FuncInfo;
std::map<int,FuncInfo> sFuncInfoMap;
//Stores the function pointer in a map
void RegisterFunction(void (*pfnDisplay)(void))
{
FuncInfo sFuncInfo;
sFuncInfo.pfnDisplay = pfnDisplay;
sFuncInfoMap.insert ( std::pair<int, FuncInfo>(1, sFuncInfo) );
}
class A
{
private:
static void Display(void)
{
printf("No one can access me");
}
public:
A()
{
RegisterFunction(Display);
}
};
class B
{
public:
void CallADisplay()
{
sStFuncInfoMap[1].pfnDisplay();
}
};
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
A a; //calls the constructor
B b;
b.CallADisplay();
return 0;
}
**Output:**
No one can access me
谢谢。
答案 0 :(得分:5)
是的,您可以通过函数指针调用私有函数,更一般地,通过指针间接访问任何成员;虽然您只能在允许访问的上下文中创建该指针。
访问控制仅阻止使用成员的名称,而不是(间接)访问成员本身。