c++ 全局变量用法

问题描述 投票:0回答:2

我想做什么:

//a.hpp

extern std::condition_variable m_condvar;
class A{
  ...
  
  };


//a.cpp
void A::func()
{
  if (condition)
  m_condvar.notify_all();
}
...


//main.cpp
...

std::condition_variable m_condvar;
while(1){
  if (m.condvar.wait_until(uLock, timePoint) == std::cv_status::timeout){
     break;
  }
}

我的问题是这是否是定义 m_condvar 的正确方法(a.hpp 中的 extern,在 main.cpp 中声明)?有没有更好的方法呢?

谢谢。

c++ c++17 c++14
2个回答
0
投票

第一个改进,这可能是需要的

//a.hpp

class A
{
public:
    std::condition_variable m_condvar;
};

所以,至少,你没有全局对象。如果您想通知/等待单个对象,则每个对象都有一个条件变量会更好。

如果你想通知或等待一组对象,你应该为该组设置一个类,并将

condition_variable
放在那里。

拥有一个包罗万象的全局几乎总是不好的。查看关于单例的文献以及为什么它们是反模式,以了解原因。


0
投票

经典的技巧是:

//header.hpp
...
#ifndef extern_
#define extern_ extern
#endif

extern_ int m_condvar;
...

// in the cpp
...
#define extern_
#include "header.hpp"
#undef extern_
...
© www.soinside.com 2019 - 2024. All rights reserved.