gpt4 book ai didi

没有cpp文件的c++静态类变量

转载 作者:太空狗 更新时间:2023-10-29 20:14:36 25 4
gpt4 key购买 nike

我有一个用于存储传感器数据的简单类,可以概括为

class Data
{
public:
Data(){timestamp = Time::now(); id = sNextID++; data = 0; type = DATA_TYPE_UNKNOWN;}

double data;
Time timestamp;
DataType type;

private:
static unsigned int sNextID;
};

我有一个头文件,它声明了一堆类似的数据类。鉴于类的简单性,不需要实现 cpp 文件。

问题是,如果没有实现文件,我该如何初始化 sNextID?我在某处读到它默认为 0,这很好,尽管依赖它似乎有点老套。但更重要的是,如果没有在某个地方初始化它,链接器会提示 undefined reference 。

最佳答案

使用inline function (独立或成员):

inline unsigned &sNextID()
{
static unsigned data = 0;
return data;
}

类模板(静态定义can be in header file):

template<typename tag>
struct Foo
{
static unsigned sNextID;
};

template<typename tag>
unsigned Foo<tag>::sNextID=0;

更新:在 C++17 中 inline 变量可用:

struct Foo
{
static inline unsigned sNextID;
};

关于没有cpp文件的c++静态类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15858386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com