[英]Partial Specialization for default_delete
I would like to specialize default_delete<_Ty> for all objects derived off of MyBaseClass. 我想为从MyBaseClass派生的所有对象专门化default_delete <_Ty>。 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 seems to be unable to recognize that my type parameter 'T' is being used, which is understandable given that it is 'downstream' from a 'typename' keyword. 编译器似乎无法识别我的类型参数'T'正在被使用,这是可以理解的,因为它是'typename'关键字的'下游'。 Is what I'm trying to accomplish possible?
我正在努力实现的目标是什么?
As 0x499602D2 states in comment, it is not possible without an extra dedicated template parameter. 正如0x499602D2在注释中所述,没有额外的专用模板参数是不可能的。 you may use your own deleter as follow:
您可以使用自己的删除器,如下所示:
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 */ }
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.