gpt4 book ai didi

c++ - 如何将静态类成员放入命名空间?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:38 24 4
gpt4 key购买 nike

#include <iostream>
#include <stdlib.h>
#include <sstream>

class api
{
private:
void psParser ()
{
std::stringstream psOutput;
psOutput << "ps --no-headers -f -p " << getpid() << " > .txt";

system (psOutput.str().c_str());

std::stringstream processInfo;
processInfo << ":"__FILE__ << ":" << __DATE__ << ":" << __TIME__ << ":";
}

public:
static std::stringstream message;
};

namespace sstreamss
{
std :: stringstream api :: message;
};

int main ()
{
api::message << "zxzx";

return 0;
}

输出:

错误:“api::message”的定义不在包含“api”的命名空间中

我希望 static std::stringstream message 应该可以在全局范围内访问,所以我希望它在命名空间下。

出路在哪里?

最佳答案

实现这一目标的一种方法是使用单例设计模式。定义一个公共(public)静态访问器函数来访问实例。

class api
{
private:
static bool instanceFlag;
static api* inst;
....
....
public:
static api* getInstance();
inline void display(std::string msg)
{
std::cout<<msg;
}
};
bool api::instanceFlag = false;
api* api::inst = NULL;

api* api::getInstance()
{
if(! instanceFlag)
{
inst = new api();
instanceFlag = true;
return inst;
}
else
{
return inst;
}
}
int main()
{
// Access the static instance. Same instance available everywhere
api::getInstance()->display("zxzx");
}

关于c++ - 如何将静态类成员放入命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14827377/

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