mirror of
https://github.com/QuasarApp/QuasarAppLib.git
synced 2025-05-08 15:39:44 +00:00
try create universaly service class
This commit is contained in:
parent
c29c9edc52
commit
d7b9ccef40
34
qaservice.h
34
qaservice.h
@ -65,6 +65,10 @@ namespace QuasarAppUtils {
|
|||||||
template<class Base>
|
template<class Base>
|
||||||
class Service
|
class Service
|
||||||
{
|
{
|
||||||
|
struct Block {
|
||||||
|
Base* _data = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Service() {};
|
Service() {};
|
||||||
|
|
||||||
@ -78,10 +82,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
template<class BaseClass = Base, class... Args>
|
template<class BaseClass = Base, class... Args>
|
||||||
static Base* initService(Args&&... args) {
|
static Base* initService(Args&&... args) {
|
||||||
if(!_data) {
|
auto& val = instancePrivat();
|
||||||
_data = new BaseClass(std::forward<Args>(args)...);
|
if(!val._data) {
|
||||||
|
val._data = new BaseClass(std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
return _data;
|
return val._data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,7 +98,7 @@ public:
|
|||||||
* @see autoInstance
|
* @see autoInstance
|
||||||
*/
|
*/
|
||||||
static Base* instance() {
|
static Base* instance() {
|
||||||
return _data;
|
return instancePrivat()._data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -102,12 +107,13 @@ public:
|
|||||||
* @see instance
|
* @see instance
|
||||||
*/
|
*/
|
||||||
static Base* autoInstance() {
|
static Base* autoInstance() {
|
||||||
|
auto& val = instancePrivat();
|
||||||
|
|
||||||
if (!_data) {
|
if (!val._data) {
|
||||||
initService();
|
initService();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _data;
|
return val._data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,20 +124,22 @@ public:
|
|||||||
* @see autoInstance
|
* @see autoInstance
|
||||||
*/
|
*/
|
||||||
static void deinitService() {
|
static void deinitService() {
|
||||||
if(_data) {
|
auto& val = instancePrivat();
|
||||||
delete _data;
|
|
||||||
_data = nullptr;
|
if(val._data) {
|
||||||
|
delete val._data;
|
||||||
|
val._data = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Base* _data;
|
static inline Block& instancePrivat() {
|
||||||
|
static Block instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class Base>
|
|
||||||
Base* Service<Base>::_data = nullptr;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // QASERVICE_H
|
#endif // QASERVICE_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user