好的,所以我正在嘗試從 STL 重新實作 Vector 類。這是模板類的一小部分,其中包括作為引數傳遞的分配器的簡單 typedef。
template<typename T, typename Allocator = std::allocator<T>>
class vector {
public:
typedef Allocator allocator_type;
// Other typedefs...
}
然而,很簡單,我就是無法理解這個建構式:
explicit vector(const allocator_type &alloc = allocator_type());
什么是allocator_type()指的是?是typedef嗎?這是某種函式呼叫嗎?甚至可以在這里傳遞用戶定義的型別嗎?我可能只是錯過了一些東西。
uj5u.com熱心網友回復:
是的,就是typedef.
類模板引數Allocator具有默認型別std::allocator<T>. 如果使用與否并不重要。重要的是,無論型別Allocator是什么,它都會以allocator_type.
建構式有一個默認值,它是默認構造的allocator_type(無論是什么型別)。您可以為allocator_type建構式提供一個(可能不是默認構造的)的實體,它會改用它。
uj5u.com熱心網友回復:
該allocator_type是對的別名Allocator。它們的含義相同,但Allocator僅對類的成員可見,因此需要別名才能使其成為public。
您找到的建構式等效于:
explicit vector(const Allocator &alloc = Allocator());
除了這個符號對于只能allocator_type在他們的代碼中使用名稱的類的用戶來說更容易混淆。
= allocator_type()只是告訴編譯器它是一個可選引數。如果用戶不allocator_type向 的建構式提供任何其他物件vector,則Allocator/的默認建構式allocator_type將用于創建要傳遞到那里的物件。
uj5u.com熱心網友回復:
回答潛在的問題:這個建構式有什么意義?它是一種特殊的默認建構式。SFINAE(替換失敗不是錯誤)意味著這不是默認建構式,因為vectorwhenAllocator不可默認構造。不過,它仍然可以用作普通建構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376723.html
上一篇:如何簡潔地實體化多個列舉的模板?
