对于模板类
template<typename T>
class node{
public:
static auto null_node_type = typename //shared pointer holding node<T>*
// cast from NULL
};
我想在模板定义中包含上面的类型声明,但不知道如何实现这一点。
我尝试了以下内容,但没有成功:
1. static auto null_node_type =
typename shared_ptr<reinterpret_cast<node<T>*>(NULL)>;
在这种情况下,编译器会抱怨shared_ptr<>
模板需要一个类型。
2. std::function<shared_ptr<T>(T)> make_null_obj_type = [] (T arg){
return(make_shared<arg>(NULL));
};
template<typename T>
class node{
public:
static auto null_node_type = make_null_obj_type<node<T>>;
};
在这种情况下,编译器会标记node<T>
(其中T
被实际模板参数替换)不是完整对象类型的错误。
实现这一目标的正确方法是什么?