![](/img/trans.png)
[英]How does smart pointer choose default_delete by partial specialization?
[英]Partial Specialization for default_delete
我想为从MyBaseClass派生的所有对象专门化default_delete <_Ty>。 这是我最好的尝试:
template <typename T>
struct default_delete<typename enable_if<is_base_of<MyBaseClass, T>::value, T>::true_type>
{
...
};
编译器似乎无法识别我的类型参数'T'正在被使用,这是可以理解的,因为它是'typename'关键字的'下游'。 我正在努力实现的目标是什么?
正如0x499602D2在注释中所述,没有额外的专用模板参数是不可能的。 您可以使用自己的删除器,如下所示:
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.