template<typename T>
class Singleton {
public:
static T* instance() {
return _s_instance;
}
protected:
Singleton() {}
virtual ~Singleton() {}
private:
//only declare; forbiden copy and assign
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static T* _s_instance;
};
template<typename T> T* Singleton<T>::_s_instance = new T;
class GlobalData : public Singleton<GlobalData> {
public:
GlobalData() {
_m_concurrency_sender_num = 0;
}
~GlobalData() {};
void concurrency_sender_incr() {
_m_concurrency_sender_num++;
}
void concurrency_sender_decr() {
_m_concurrency_sender_num--;
}
private:
boost::atomic<int> _m_concurrency_sender_num;
};
使用一个单例模式的模板类,将GlobalData类继承自它,就可以用GlobalData来管理工程中的全局变量。
在使用时,只需要这样调用即可:
GlobalData::instance()->concurrency_sender_incr();
GloablData::instance()->concurrency_sender_decr();