0
我試圖通過添加一個宏來簡化一個庫。我一直在閱讀宏可以完成的所有不同的事情,但沒有運氣實現我想要的方式。C++ 03具有變量和類型的宏定義?
我寫了一個內存管理器,用於放置新功能。它跟蹤分配的內容以及它在預分配空間中的位置。
理想情況下,我想編寫類似:
MyClass* c = New(mem) MyClass(3); // use memory manager instance 'mem' and constructor 'MyClass(int)'
,並把它翻譯成:
MyClass* c = new (mem.Reserve<MyClass>()) MyClass(3);
單分配和:
MyClass* c = New(mem) MyClass[33]; //use memory manager instance 'mem' and default constructor to initialize and array of 33 MyClass objects
翻譯爲:
MyClass* c = new (mem.Reserve<MyClass>(33)) MyClass[33];
Reserve<TYPE>(SIZE)
方法是管理內部參數的方法。它在由mem
管理的預分配內存中保留(sizeof(TYPE)*(SIZE))
字節,並將起始地址的指針返回到放置新函數。
這是一個宏的可行操作?或者有更好的方法來解決這個問題嗎?
我只限於C++ 03標準,因爲這是我的ARM編譯器支持的。
我很欣賞任何建議和例子,以幫助我更好地理解這一點! 謝謝!
我不這麼認爲。宏知道的所有內容都在'()'內,':: new操作符在任何情況下都不知道傳入的類型。 Ergo,宏無法找到請求內存的東西的類型/範圍。 –
爲什麼不簡單使用該功能? 'MyClass * c = mem.Reserve(33);' –
我有一個運行放置新功能的函數'mem.New(SIZE)'。我的問題是,我只能硬編碼默認的構造函數。我需要能夠調用任何構造函數,所以我的想法是消除New函數,並讓用戶直接使用放置位置。 –
radensb