我想打一個別名模板std::unique_ptr
供應我自己刪除器功能。我怎樣才能使性病的有效C++模板別名::的unique_ptr
unique_ptr
既有標量和數組實現,他們是這樣定義的:
template <class T, class D = default_delete<T>>
class unique_ptr // scalar
template <class T, class D>
class unique_ptr<T[], D> // array
我遇到麻煩試圖同時重寫的unique_ptr
的標量和數組版本。這很容易使一個別名只有一個版本,像這樣:
template<class T>
struct Deleter {
void operator()(T* ptr) { delete ptr; }
};
template<class T>
using my_unique_ptr = std::unique_ptr<T Deleter<T>>;
但是當我嘗試添加第二個別名,就像這樣:
template<class T>
struct ArrayDeleter {
void operator()(T* ptr) { delete [] ptr; }
};
template<class T>
using my_unique_ptr = std::unique_ptr<T[], ArrayDeleter<T>>;
...我結束了編譯器錯誤因爲「my_unique_ptr
」是不明確的。
我的問題是:如何創建一個可以同時用於陣列和標量版本unique_ptr
的單個別名?
這爲我工作,謝謝。我根本不需要製作ArrayDeleter結構。相反,我創建了一個通用的「模板刪除器」以及用於T []的Deleter專用化。 –