简体   繁体   English

default_delete的部分专业化

[英]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.

相关问题 智能指针如何通过偏特化选择default_delete? - How does smart pointer choose default_delete by partial specialization? 带有QQmlComponent的专用std :: default_delete - specialized std::default_delete with QQmlComponent 局部专业化的默认参数 - Default parameter for partial specialization 为`std :: shared_ptr`专门化`std :: default_delete` - specialise `std::default_delete` for `std::shared_ptr` 删除模板化结构部分特化 - Delete templated struct partial specialization 默认模板参数偏特化 - Default template parameter partial specialization 默认模板参数和部分特化 - Default template paramters and partial specialization `std :: shared_ptr`默认情况下不应该使用`std :: default_delete`? - Shouldn't `std::shared_ptr` use `std::default_delete` by default? 错误:从 'unique_ptr 转换<greenstack,default_delete<greenstack> &gt;' 到非标量类型 'unique_ptr <stack,default_delete<stack> &gt;' 请求</stack,default_delete<stack></greenstack,default_delete<greenstack> - error: conversion from ‘unique_ptr<GreenStack,default_delete<GreenStack>>’ to non-scalar type ‘unique_ptr<Stack,default_delete<Stack>>’ requested 默认模板参数在部分专业化背景下的作用 - Role of default template arguments in the context of partial specialization
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM