声明带有静态链接的静态成员

Gea*_*phy 4 c++ static namespaces linkage

我有一个C ++类,它声明一个静态成员。整个类都包含在头文件中,我宁愿避免仅创建一个包含静态成员定义的.cpp文件。我一直在尝试使用static关键字(在C方面)和匿名名称空间,这两者都应提供在头文件中声明的变量静态链接(asfaik),但两种方法都行不通,谁能给我解决方案问题?

struct ServiceType {} ;
struct Transport
{
    static ServiceType service ;
};

//error: definition of ‘Transport::service’ is not in namespace enclosing ‘Transport’
//namespace { ServiceType Transport::service ; }

//error: ‘static’ may not be used when defining a static data member
//static ServiceType Transport::service ;
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 5

如果目标是不必创建.cpp文件,则最简单的解决方案可能是将静态数据成员包装在内联静态成员函数中。换句话说,类似:

struct Transport
{
    static ServiceType& service()
    {
        static ServiceType theData;
        return theData;
    }
};
Run Code Online (Sandbox Code Playgroud)

当然,您必须使用语法service(),而不仅仅是使用语法service