我有一個C++稱爲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我試圖註冊成員函數指針,而不是普通香草函數指針,編譯器大叫我。
有沒有人對我如何實現這樣的功能有任何建議?看到模板實現(或多態一)如何實現,我有問題。
謝謝
亞倫
使用'的std ::功能'(或'的boost :: function',如果你沒有訪問C++ 11庫)。 –
Mankarse
2013-02-11 20:24:22
如果我明白,你嘗試通過使用它的一個成員函數來獲取對象的大小,但在創建對象本身之前?這聽起來不太可能(也許我錯了)。 – Synxis 2013-02-11 20:37:06
Mankarse,謝謝!那的確的確行得通! – Aaron 2013-02-11 21:49:07