跨模块的单例类--在一个模块中实现整个项目公用的单例类
参考:https://blog.csdn.net/chenkai5182/article/details/100710545
dll模块中用static实现的单例类,在链接到另一个模块后,会生成两个实例。
因为实际上dll和需要链接dll的另一个模块上,调用单例类是调用的两个不同的函数(函数逻辑相同,但是代码的位置不同)。
在dll模块中将生成static变量的函数导出,这样在链接时,都是链接的同一个函数。
class Singleton
{
public:
__declspec(export) static Singleton& Instance()
{
sta
class Log
{
public:
__declspec(dllexport) static Log* Instance() //导出
{
static Log mLog;
return &mLog;
}
void SetCfg(std::string cfgPath);
protected:
std::string GetExeName();
bool ReadCfg(const char* cfgPath);
private:
Log()
{
_needSaveLog = false;
_logName = "";
_logLevel = spdlog::level::critical;
}
Log(const Log& log) = default;
Log& operator = (const Log& log) = default;
virtual ~Log() {};
private:
std::shared_ptr<spdlog::logger> _logger;
spdlog::level::level_enum _logLevel;
std::string _logName;
bool _needSaveLog;
};
}
浙公网安备 33010602011771号