我试着使用自定义容器,并在该容器的构造函数中传递一个内存池分配器。 整个事情开始是这样的:使用模板容器的构造函数有问题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。 –