【发布时间】:2017-07-22 19:20:07
【问题描述】:
我想为std::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 的数组和标量版本?
【问题讨论】:
标签: c++ arrays c++11 templates unique-ptr