gpt4 book ai didi

c++ - 未能将指向函数的指针用作类的成员

转载 作者:行者123 更新时间:2023-11-28 06:35:13 25 4
gpt4 key购买 nike

我有以下问题:我有一个指向函数的指针,作为类 B 的成员,它存在于封装类 A 中。

Class A
{
public:
ObjAbs* CreateObject(int id);

private:
Class B
{
typedef ObjAbs* (B::*pfnObjAlloc)();
pfnObjAlloc mfnAlloc;
MemPool* mpPool;

template<typename T>
ObjAbs* TAlloc()
{
ObjAbs* pObj = NULL;
void *memory = NULL;

if(mpMemPool)
memory = mpMemPool->Alloc();

if (NULL != memory)
param = new (memory) T();

return ObjAbs;
}

}

B mAllocArr[maxObjsId];

A::A()
{
mAlloArr[id1] = &A::B::TAlloc<Obj1>;
mAlloArr[id2] = &A::B::TAlloc<Obj2>;
.
.
.
}

}

我正尝试通过以下方式从 A 类访问它:

ObjAbs*  A::CreateObject(int id)
{
ObjAbs* pObj = NULL;
if(NULL != AllocArr[id].mfnAlloc)
pObj = (AllocArr[id].*mfnAlloc)(); <-- There lies the problem

return pObj;
}

我不断收到以下错误:错误 C2065:“mfnAlloc”:未声明的标识符

有人可以帮助我吗?

谢谢,

最佳答案

pObj = (AllocArr[id].*mfnAlloc)();

尝试在当前作用域中查找 mfnAlloc,而不是在 B 中。

调用指向成员函数的指针的语法是 (object.*function)(),因为 objectfunction code> 在当前范围内被评估,你需要更多类似的东西

(AllocArr[id].*(AllocArr[id].mfnAlloc))();

这是一团乱七八糟的代码,所以向 B 添加另一个成员函数可能是个更好的主意:

ObjAbs* allocate()
{
return (*mfnAlloc)();
}

这样你就可以写出更具可读性的

pObj = AllocArr[id].allocate();

关于c++ - 未能将指向函数的指针用作类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887114/

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