Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
C++ 仅标头库中的静态成员_C++ - Fatal编程技术网

C++ 仅标头库中的静态成员

C++ 仅标头库中的静态成员,c++,C++,我正在创建仅标题库,必须使用静态成员。 是否可以在头文件中定义它而无需重新定义警告?假设您谈论的是静态数据成员,因为静态函数成员没有问题,所以针对不同的情况有不同的技术: 简单整数类型,const,地址未采用: 在类定义的声明中给它一个值。或者您可以使用enum类型 其他类型,逻辑常量: 使用C++11constexpr 不一定是常量,或者不能使用constexpr: 使用模板化静态技巧或Meyers的单例 梅耶斯的单身例子: class Foo { private: static

我正在创建仅标题库,必须使用静态成员。

是否可以在头文件中定义它而无需重新定义警告?

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

  • 简单整数类型,
    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; }
};
模板
结构Foo_静态
{
静态int n_实例;
};
模板
int Foo_statics::n_实例;
福班
:私人Foo_statics
{
公众:
~Foo(){--n_实例;}
Foo(){++n_实例;}
Foo(Foo const&){++n_实例;}
};

免责声明:编译器不涉及任何代码。

显式
内联
可能有助于定义。可能存在重复的