Partial specialization for default_delete

I would like to specialize default_delete <_Ty> for all objects derived from MyBaseClass. This was my best attempt:

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

      

The compiler doesn't seem to be able to recognize that my type parameter "T" is being used, which is understandable given that it is "descending" from the keyword "typename". Is this what I am trying to make possible?

+3


source to share


1 answer


As pointed out in the comment 0x499602D2, this is not possible without a custom template parameter. you can use your own deleter like this:



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 */ }
};

      

+3


source







All Articles