我有一个名为 MemMgr 的 C++ 单例工厂类,它负责管理库中对象的堆内存:
#include <vector>
class MemMgr
{
public:
// Callback interface of functions to register with MemMgr
typedef size_t (*MemSizeFunc)(void);
void Register(MemSizeFunc memSizeFunc);
static MemMgr & GetInst(void);
// more public functionality related to managing memory
private:
// a vector (not a map) of functions pointers to keep track of
std::vector<MemSizeFunc> m_memSizeFuncs;
MemMgr(void);
MemMgr(MemMgr const &);
MemMgr & operator= (MemMgr const &);
// more private functionality related to managing memory
};
我想做的是让任何想要使用托管内存的类的对象都能够通过(非静态)成员函数向 MemMgr 注册自己,该函数将计算并返回托管内存的数量该特定对象需要的。类似于以下内容:
class MemMgrUser
{
public:
MemMgrUser(void)
{
MemMgr::GetInst().Register(GetManagedMemSize);
}
private:
size_t GetManagedMemSize(void)
{
// calculations involving member variables
}
};
(然后,在 MemMgr 实际分配任何内存之前,它会查询注册到它的与大小相关的函数,以找出要分配的内存量。)
但是,当我尝试上述方法时,编译器会对我大喊大叫 b/c 我试图注册成员函数指针,而不是普通的函数指针。
有人对我如何实现此类功能有任何建议吗?我在查看如何实现模板实现(或多态实现)时遇到问题。
谢谢,
亚伦