C++11 std中嵌套类型的部分专门化
考虑在C++11中简化链表实现C++11 std中嵌套类型的部分专门化,c++11,C++11,考虑在C++11中简化链表实现 template<typename T> struct list { struct node { T value; std::unique_ptr<node> next; }; std::unique_ptr<node> root; }; 所有节点都是std::unique\u ptr。这很好,但是我必须为我拥有的每一个std::unique\u ptr编写更多的
template<typename T>
struct list
{
struct node
{
T value;
std::unique_ptr<node> next;
};
std::unique_ptr<node> root;
};
所有节点都是std::unique\u ptr
。这很好,但是我必须为我拥有的每一个std::unique\u ptr
编写更多的代码。相反,我可以部分地专门化std::default\u delete
namespace std
{
template<typename T>
struct default_delete<typename list<T>::node>
{
void operator()(typename list<T>* node) const
{
}
};
}
一个简单的解决方法是为该类型编写using声明:
using node_ptr = std::unique_ptr<node, my_list_delete<node>>;
使用node_ptr=std::unique_ptr;
一个简单的解决方法是为该类型编写一个using声明:
using node_ptr = std::unique_ptr<node, my_list_delete<node>>;
使用node_ptr=std::unique_ptr;
您可以“取消”内部类:
template <typename T> struct list_node {
T value;
std::unique_ptr<node> next;
};
template<typename T> struct list {
using node = list_node<T>;
std::unique_ptr<node> root;
};
namespace std {
template<typename T> struct default_delete<list_node<T>> {
void operator()(typename list<T>* node) const { }
};
}
default_delete<list<T>::node>()(...); // works
模板结构列表\u节点{
T值;
std::unique_ptr next;
};
模板结构列表{
使用节点=列表\节点;
std::唯一的_ptr根;
};
名称空间标准{
模板结构默认值\u删除{
void运算符()(类型名列表*节点)常量{}
};
}
默认删除()(…);//作品
您可以“取消”内部类:
template <typename T> struct list_node {
T value;
std::unique_ptr<node> next;
};
template<typename T> struct list {
using node = list_node<T>;
std::unique_ptr<node> root;
};
namespace std {
template<typename T> struct default_delete<list_node<T>> {
void operator()(typename list<T>* node) const { }
};
}
default_delete<list<T>::node>()(...); // works
模板结构列表\u节点{
T值;
std::unique_ptr next;
};
模板结构列表{
使用节点=列表\节点;
std::唯一的_ptr根;
};
名称空间标准{
模板结构默认值\u删除{
void运算符()(类型名列表*节点)常量{}
};
}
默认删除()(…);//作品
那会管用,但我更感兴趣的是std::default\u delete
解决方案那会管用,但我更感兴趣的是std::default\u delete
解决方案