C++ 创建和导出C++;来自DLL的单例类
我有一个小查询,如何从DLL创建和导出Singleton类?可以跨同一应用程序的多个模块共享。我的意图是创建一个集中的自定义日志系统,它将登录到同一个文件中C++ 创建和导出C++;来自DLL的单例类,c++,windows,visual-c++,com,C++,Windows,Visual C++,Com,我有一个小查询,如何从DLL创建和导出Singleton类?可以跨同一应用程序的多个模块共享。我的意图是创建一个集中的自定义日志系统,它将登录到同一个文件中 任何例子或链接将不胜感激 发布的链接ajitomatix是针对模板化的单例的,非模板解决方案可能如下所示: class LOGGING_API RtvcLogger { public: /// Use this method to retrieve the logging singleton static RtvcLogger&am
任何例子或链接将不胜感激 发布的链接ajitomatix是针对模板化的单例的,非模板解决方案可能如下所示:
class LOGGING_API RtvcLogger
{
public:
/// Use this method to retrieve the logging singleton
static RtvcLogger& getInstance()
{
static RtvcLogger instance;
return instance;
}
/// Destructor
~RtvcLogger(void);
/// Sets the Log level for all loggers
void setLevel(LOG_LEVEL eLevel);
/// Sets the minimum logging level of the logger identified by sLogID provided it has been registered.
void setLevel(const std::string& sLogID, LOG_LEVEL eLevel);
/// Log function: logs to all registered public loggers
void log(LOG_LEVEL eLevel, const std::string& sComponent, const std::string& sMessage);
protected:
RtvcLogger(void);
// Prohibit copying
RtvcLogger(const RtvcLogger& rLogger);
RtvcLogger operator=(const RtvcLogger& rLogger);
....
};
其中,LOGGING_API定义为
// Windows
#if defined(WIN32)
// Link dynamic
#if defined(RTVC_LOGGING_DYN)
#if defined(LOGGING_EXPORTS)
#define LOGGING_API __declspec(dllexport)
#else
#define LOGGING_API __declspec(dllimport)
#endif
#endif
#endif
// For Linux compilation && Windows static linking
#if !defined(LOGGING_API)
#define LOGGING_API
#endif
看起来您已经意识到了这一点,但为了完整起见,只要您的代码在windows上的DLL中,Meyer的单例就可以工作,如果您将其链接为静态库,它就无法工作。它真的是单例吗?没有必要让自己的生活变得更加艰难。