我試着使用自定義容器,並在該容器的構造函數中傳遞一個內存池分配器。 整個事情開始是這樣的:使用模板容器的構造函數有問題C++
AllocatorFactory alloc_fac;
//Creates a CPool allocator instance with the size of the Object class
IAllocator* object_alloc = alloc_fac.GetAllocator<CPool>(1000,sizeof(Object));
//Creates a CPool allocator instance with the size of the BList<Object> class
IAllocator* list_alloc = alloc_fac.GetAllocator<CPool>(10,sizeof(BList<Object>));
//Same logic in here as well
IAllocator* node_alloc = alloc_fac.GetAllocator<CPool>(1000,sizeof(BListNode<Object>));
的IAllocator類看起來是這樣的:
class IAllocator
{
public:
virtual void* allocate(size_t bytes) = 0;
virtual void deallocate(void* ptr) = 0;
template <typename T>
T* make_new()
{ return new (allocate(sizeof(T))) T(); }
template <typename T, typename Arg0>
T* make_new(Arg0& arg0)
{ return new (allocate(sizeof(T))) T (arg0); }
.......
}
和容器類的構造函數是這樣的:
template <class T>
class BList {
......
public:
/**
*@brief Constructor
*/
BList(Allocators::IAllocator& alloc){
_alloc = alloc;
reset();
}
/**
*@brief Constructor
*@param inOther the original list
*/
BList(const BList<T>& inOther){
reset();
append(inOther);
}
.....
}
當我這樣做:
BList<Object> *list = list_alloc->make_new<BList<Object>>(node_alloc);
編譯器抱怨這一點:
錯誤1錯誤C2664: '集裝箱:: BList :: BList(分配器:: IAllocator &)':無法從 '分配器:: IAllocator *' 來轉換參數1'分配器:: IAllocator &「C:\ licenta \ licenta-transfer_ro-02may-430722 \ licenta \框架\框架\ iallocator.h 21框架
我覺得我去了我的頭,這一個....
+1解釋的錯誤消息。 –
感謝您的所有答案。它們都是有效的,但是因爲我只能將其中一個標記爲解決方案,所以我選擇它是因爲它具有較高的教育價值:p。 –