私は例えば、basic_string
クラスで使用するために、私のカスタムアロケータタイプ、MyAllocator<foo>
を再バインドしようとしている:rebindがカスタムアロケータに存在しない場合、std :: allocator_traitsはrebind_allocを定義しますか?
std::basic_string<char, std::char_traits<char>, MyAllocator<char>> ...
をアロケータがMyAllocator<void>
としてコンテキストに渡されたので、私はアロケータを再バインドする必要がありますされます。
メンバーのエイリアステンプレート:
rebind_alloc<T>
:std::allocator_traits
、http://en.cppreference.com/w/cpp/memory/allocator_traits用cppreferenceページから
Alloc::rebind<T>::other
存在する場合、それ以外の場合はAlloc<T, Args>
これのAllocはAlloc<U, Args>
マイカスタムアロケータの実装であればallocator_traits
ですが、リバインド構造体は定義されていません( ppearはallocator_traits
を実装するための要件となります)。私の文書の理解は、allocator_traits
はrebind_alloc
を理解しなければならないということです。私はbasic_string
型にRebindAlloc<char>
を渡すしようとしたとき、私は、さまざまなコンパイルエラーを取得
template<typename T>
using RebindAlloc =
typename std::allocator_traits<MyAllocator<void>>::template rebind_alloc<T>;
::私は私のカスタムアロケータタイプにrebind_alloc
を呼び出してしようとした場合しかし、
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/string:52:
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/basic_string.h:114:41: error:
'rebind' following the 'template' keyword does not refer to a template
typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
明らかドキュメントは私を誤解しています。私はちょうどrebind_alloc
をあきらめて、カスタムアロケータでリバインドを実装するか、allocator_traits
を使ってこれを行う正しい方法がありますか?
gcc 4.8をC++ 11で使用しています。現在のところ、14はオプションではありません。
ここで私が何をしようとしているのコードスニペットです: https://gist.github.com/jacquelinekay/0cee73d1d2d78d8edd31
に文字列で使用されていないので、だからあなたのアロケータは、あなたが(ほぼ)私はに差し込むことができますコンパイルの例を最小を投稿することができ、すべてのメンバーを定義し、C++ 03アロケータの要件を満たす必要があります。私のコンパイラはチェックする? –
私は理解できない元の投稿に記載されているコンパイルエラーを除き、有効であるべきコードスニペットで編集しました。 – Jackie
@Jackieは、gcc 5.1 –