跨模块的单例类--在一个模块中实现整个项目公用的单例类

参考: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;
};

  

}

posted on 2022-02-28 17:19  林西索  阅读(233)  评论(0编辑  收藏  举报