default_delete的部分专业化
Partial Specialization for default_delete
我想专门化default_delete<_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 */ }
};
相关文章:
- 如何使用默认参数等选择模板专业化
- 模板化建造师专业化
- 运算符C++ "delete []"仅删除 2 个前值
- 类模板的成员功能的定义在单独的TU中完全专业化
- 部分专业化和嵌套模板
- g++用户定义的动态链接库上的全局new和delete运算符
- 模板专业化可以进入我的.cpp吗?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 为什么"delete"关键字不删除节点?
- 部分专业化和对标准::void_t<>的需求
- "delete"在 C++ 中实际上做了什么?
- 析构函数和'delete'之间的区别
- "专业化不参与超载"
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 特定好友功能专业化
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 是否可以混合使用SFINAE和模板专业化?
- 析构函数中的"delete this"
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到