この質問は私の以前のものから続きます:Why shouldn't C++ operator new/delete/variants be in header files?。すぐに要約すると、私はグローバルオペレータnew
、delete
などをオーバーライドすることを学んでいます。私はカスタムアロケータクラスを必要としています(私のオーバーロードされたオペレータnew std::set::insert(...)
、これはnew
というように無限の再考です)。私と思う私は私のstd::set
にカスタムアロケータ(例えば、new
の代わりにmalloc
を使用する)を供給すれば、私は無限再帰をバイパスすることができます。struct rebind :: otherは何を意味しますか?
私はカスタムアロケータの実装についていくつか読んできましたが、意味はstruct rebind
で混乱しています。
良いQ &があります。ここにはParsing allocator::rebind callsがありますが、まだ特定のアイテムが混乱しています。他の
そのメンバーのタイプIは
other
がstruct rebind
のメンバーであるかを理解していないタイプタイプ
の要素を割り当てるための同等のアロケータタイプです:cplusplus.com約struct rebind
は言います。
template <class Type> struct rebind {
typedef allocator<Type> other;
};
私はother
がstruct rebind
のメンバ変数がどのように表示されていない。struct rebind
の定義は、私のような表情を発見しました。それはちょうどtypedef
edです。グローバルネームスペース内でtypedef int foo;
を実行した場合、グローバル名前空間に宣言されたタイプint
のグローバル変数があるわけではないので、other
はどのようにしてstruct rebind
のメンバーになるのですか?
ところで、私はこれを読んだことがある(または少なくとも私はそれを読んだことがあります)。これはすべてC++ 11の後に簡略化されていますが、私はこれを最初に理解したいので、助けてくれてありがとう。
このトピックでは、struct内でtypedef
の取引について説明する人もいますか?私はこれまでに回答者Johannes Schaubのamazing exampleでこれを見たことがありますが、私はそれをまだ完全に突き止めていません。私にとっては、typedefのスコープを含む構造体のインスタンス内に制限するように見えます。
UPDATE:私は私の質問にこれを追加したい
。 cppreference.comからこの簡略例を使用:
#include <memory>
#include <iostream>
#include <string>
int main()
{
std::allocator<int> a1; // default allocator for ints
decltype(a1)::rebind<std::string>::other a2_1;
}
はstd::allocator<std::string> a2_1;
を言うの長い道のりラインdecltype(a1)::rebind<std::string>::other a2_1;
ありませんか?
'struct 'の中の' typedef'は、与えられたテンプレートに基づいてタイプを選択することを可能にします。それで全部です。特別なことをするためのスペシャライゼーションがあるかもしれませんが、それだけです。しかし、 'make_integer_sequence'の実装はあなたに必要なものを提供するためにいくつかの素早い再帰を使用します。 – AndyG