這個問題跟我以前的一樣:Why shouldn't C++ operator new/delete/variants be in header files?。爲了快速總結,我正在學習覆蓋全球運營商new
,delete
等。我現在需要一個自定義分配器類(我的重載運算符新調用std::set::insert(...)
,這似乎本身稱爲new
,因此無限回憶)。我認爲如果我提供自定義分配器(例如,使用malloc
而不是new
)到我的std::set
我可以繞過無限遞歸。struct rebind :: other是什麼意思?
我已經做了一些關於實現自定義分配器的閱讀,並且對struct rebind
的語義有些困惑。
有一個很好的Q &這裏:Parsing allocator::rebind calls,但我仍然困惑於一個特定的項目。 cplusplus.com說,大約struct rebind
:
它的成員類型另一種是相當於分配器類型分配我不明白怎麼
other
是struct rebind
成員類型類型
的元素。該定義爲struct rebind
我發現的樣子:
template <class Type> struct rebind {
typedef allocator<Type> other;
};
我看不出other
是struct rebind
一個成員變量。這只是typedef
版。如果我在全局命名空間中做了typedef int foo;
,那並不意味着在全局命名空間中聲明瞭一個全局變量int
,那麼other
又如何成爲struct rebind
的成員?順便說一下,我知道(或者至少我已經閱讀過),這已經在C++ 11之後被簡化了,但我仍然想首先理解這一點,這樣我就可以理解我的基本原理了。謝謝你的幫助。
雖然在這個話題上,有人可以解釋一個結構內的typedef
ing嗎?我在回答者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;
}
是不是行decltype(a1)::rebind<std::string>::other a2_1;
說std::allocator<std::string> a2_1;
很長的路要走?
'struct'中的typedef'ing允許你根據給定的模板來選擇一個類型。就這樣。你可能有專門的地方做特別的事情,但就是這樣。儘管'make_integer_sequence'的實現使用了一些很酷的遞歸來爲你提供所需的東西。 – AndyG