私はカスタムコンテナを使用しようとしています。そのコンテナのコンストラクタでメモリプールアロケータを渡します。 全体のものは、次のように起動します:テンプレートコンテナのコンストラクタを使用する際に問題が発生する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 Frameworkの
私は、私はこの1つで私の頭の上に行ったと思い....
+1エラーメッセージを説明するため。 –
すべての答えをありがとう。それらはすべて有効ですが、私は解決策としてマークすることしかできませんので、教育上の価値が高いため、これを選択しました。 –