c++ - 如何访问静态 void* 函数中的私有(private)成员

标签 c++ boost pthreads

文件:服务.hpp

class Service
{
private:
         boost::unordered_map<std::string,int> m_mapModuleType2FD;
         void ProcessRequest();
public:
         static void* KeepAlive(void* arg);

};

文件:服务.cpp:

在函数Process Request中我更新了 map

void Service::ProcessRequest()
{
       m_mapModuleType2FD["ak"] = 1;
       LaunchKeepAlive();           

}


void Service::LaunchKeepAlive()
{
 pthread_create( & m_ptKeepAliveThreadID, NULL, Service::KeepAlive, NULL );
}

现在在 KeepAlive 中我试图寻找更新的值

void * Service::KeepAlive(void* arg)
{
    boost::unordered_map<std::string,int>::iterator itrDummy;
    itrDummy = m_mapModuleType2FD.find("AK"); --- Line 420
}

哪里出错了

错误:第 420 行。在静态成员函数中无效使用成员“Service::m_mapModuleType2FD”

我是 C++ 的新手..所以任何输入都将不胜感激

最佳答案

在类中声明为 static 的函数不与此类的任何实例相关联(即在其主体内没有可访问的 this 指针)。

因此您不能访问任何非静态成员变量(无论是私有(private)的、 protected 还是公共(public)的,都没有关系)。

要么使您的函数成为非静态的(并在您的类的实例上调用它),要么使 boost::unordered_map 成为静态的。

(因为我不知道你真正想做什么,你必须弄清楚哪种方法适合你的需要)

关于c++ - 如何访问静态 void* 函数中的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981999/

相关文章:

c++ - 有没有办法将 std::variant 与任意多个定义的类型一起使用?

c++ - 我可以在 C++ 中仅使用 std::atomic 而不使用 std::mutex 安全地跨线程共享变量吗?

c++ - Visual Studio - 无法从链接器的命令行中删除特定的 ".lib"文件。我该如何编辑它?

c++ - vector 作为 pthread_create 的输入

c++ - 如何将 ''这个词从utf-8转成gbk

c++ - boost log - 处理断电情况

C++着色器问题

c++ - C/C++ 线程在条件上的神奇差异

使用 pThreads 的 C 代码编译正常,但会出现段错误,使用 gdb 无济于事

C++ pthreads/semaphores 不运行