c++ - 使用静态链接声明静态成员

标签 c++ static namespaces linkage

我有一个 C++ 类,它声明了一个静态成员。整个类都包含在一个头文件中,我宁愿避免仅仅为了包含静态成员定义而创建 .cpp 文件。我一直在尝试使用 static 关键字(在 C 意义上)和匿名 namespace ,这两者都应该给出一个在头文件静态链接(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 ;

最佳答案

如果目标只是不必创建 .cpp 文件,则 最简单的解决方案可能是包装静态数据 内联静态成员函数中的成员。换一种说法, 像这样的东西:

struct Transport
{
    static ServiceType& service()
    {
        static ServiceType theData;
        return theData;
    }
};

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

关于c++ - 使用静态链接声明静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272012/

相关文章:

c++ - 绘制彩虹调色板

java - 如何仅在至少创建了一个实例时才初始化静态变量

C++,跨不同 namespace 的名称冲突

c# - 引用没有类名的接口(interface)名

c++ - 在 QSharedMemory 中存储数据

JavaScript Pi Spigot 算法不起作用

c++ - 调整 2D 动态分配的大小

c++ - 如何从静态类函数初始化静态类对象

c++ - 如何合并一个 pImpl 接口(interface),同时还允许 WndProc 与其交互?

php - 解析错误 : syntax error, 意外 'use' (T_USE) in C :\wamp\www\calculater\wp-content\themes\calculater\page. php on line