【问题标题】:How to define a static member of a template class?如何定义模板类的静态成员?
【发布时间】:2018-02-09 07:51:57
【问题描述】:

我的模板类声明中有以下声明:

template<typename T1>
class node{

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

};

我不确定如何定义这个静态 const 成员?

我试过了

template<typename T1> static const shared_ptr<node<T1>>
node<T1>::null_sp2node = NULL;

但是得到以下编译错误:

error: 'static' can only be specified inside the class definition

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

【问题讨论】:

  • 假设模板代码的其余部分是内联的,另一种选择是使用静态单例函数来声明和定义静态成员。它带有(通常)无锁“第一次”检查和内联函数调用的成本,但避免了那个讨厌的定义文件。

标签: templates static c++14


【解决方案1】:

正如错误消息所述,当定义(而不是声明static 成员null_sp2node 时删除static 关键字:

template<typename T1> const shared_ptr<node<T1>>
node<T1>::null_sp2node = NULL;

关键字static 应该只在声明类定义中的static 成员时使用(就像您在node 类模板的定义中所做的那样),但不是定义成员时(即:为其创建存储)。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多