私自身のdeleter関数を提供するstd::unique_ptr
のエイリアステンプレートを作りたいと思います。私はunique_ptr
のスカラと配列の両方のバージョンを上書きしようとしてトラブルに実行しているよstd :: unique_ptrの有効なC++エイリアステンプレートを作るには
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
はスカラと配列の実装の両方を持っている、彼らはこのように定義されています。それはこのように、1つのバージョンだけのエイリアスを作るのは簡単です:
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
の配列バージョンとスカラーバージョンの両方で動作する別名を1つ作成するにはどうすればよいですか?
を次のように Deleter"をT []のDeleter専門と一緒に作成しました。 –
ArrayDeleter
を変更することができればそれが動作するはずの感謝を想定してください。 ArrayDeleter構造体を作成する必要はありませんでした。代わりに、私は一般的な "template