default_delete的部分专业化

Partial Specialization for default_delete

本文关键字:专业化 delete default      更新时间:2023-10-16

我想专门化default_delete&lt_Ty>用于从MyBaseClass派生的所有对象。这是我最好的尝试:

template <typename T>
struct default_delete<typename enable_if<is_base_of<MyBaseClass, T>::value, T>::true_type>
{
    ...
};

编译器似乎无法识别正在使用我的类型参数"T",这是可以理解的,因为它位于"typename"关键字的"下游"。我努力实现的目标可能吗?

正如0x499602D2在注释中所述,如果没有额外的专用模板参数,这是不可能的。您可以使用自己的deleter如下:

template <typename T, typename Enable = void>
struct my_default_delete : public std::default_delete<T> {}; // default to std::default_delete<T>
template <typename T>
struct my_default_delete<T, typename std::enable_if<std::is_base_of<MyBaseClass, T>::value>::type>
{
    void operator() (T* ) { /* Your specific implementation */ }
};