Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何定义模板类的静态成员?_Templates_Static_C++14 - Fatal编程技术网

Templates 如何定义模板类的静态成员?

Templates 如何定义模板类的静态成员?,templates,static,c++14,Templates,Static,C++14,我的模板类声明中包含以下声明: template<typename T1> class node{ public: static const shared_ptr<node<T1>> null_sp2node; }; 在此实例中,定义静态成员的正确方法是什么?正如错误消息中所述,在定义(而不是声明)静态成员null\u sp2node时,请删除静态关键字: template<typename T1> const shared_ptr<n

我的模板类声明中包含以下声明:

template<typename T1>
class node{

public:
static const shared_ptr<node<T1>> null_sp2node;

};

在此实例中,定义静态成员的正确方法是什么?

正如错误消息中所述,在定义(而不是声明)静态
成员
null\u sp2node
时,请删除
静态
关键字:

template<typename T1> const shared_ptr<node<T1>>
node<T1>::null_sp2node = NULL;
模板常量共享\u ptr
node::null_sp2node=null;

关键字
static
仅在类定义中声明
static
成员时使用(就像在
节点
类模板的定义中所做的那样),但在定义成员(即:为其创建存储)时不使用

假设模板的其余代码是内联的,另一个选项是使用静态单例函数来声明和定义静态成员。它附带(通常)无锁“第一次”检查和内联函数调用的成本,但避免了讨厌的定义文件。
error: 'static' can only be specified inside the class definition
template<typename T1> const shared_ptr<node<T1>>
node<T1>::null_sp2node = NULL;