gpt4 book ai didi

c++ - 仅 header 库中的静态成员

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:38 25 4
gpt4 key购买 nike

我正在创建仅 header 库,我必须使用静态成员。
是否可以在头文件中定义而不出现重定义警告?

最佳答案

假设您谈论的是静态数据成员,因为静态函数成员没有问题,所以针对不同的情况有多种技术:

  • 简单整型,const,未取地址:
    在类定义的声明中给它一个值。或者您可以使用 enum 类型。

  • 其他类型,逻辑常量:
    使用 C++11 constexpr

  • 不一定是常数,或者你不能使用constexpr:
    使用模板化静态技巧,或迈耶斯的单例。

Meyers 单例示例:

class Foo
{
private:
static
auto n_instances()
-> int&
{
static int the_value;
return the_value;
}
public:
~Foo() { --n_instances(); }
Foo() { ++n_instances(); }
Foo( Foo const& ) { ++n_instances(); }
};

模板化静态技巧示例:

template< class Dummy >
struct Foo_statics
{
static int n_instances;
};

template< class Dummy >
int Foo_statics<Dummy>::n_instances;

class Foo
: private Foo_statics<void>
{
public:
~Foo() { --n_instances; }
Foo() { ++n_instances; }
Foo( Foo const& ) { ++n_instances; }
};

免责声明:编译器未触及任何代码。

关于c++ - 仅 header 库中的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226251/

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