Skip to content

Instantly share code, notes, and snippets.

@DariusL
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DariusL/f828fc573554e72e096f to your computer and use it in GitHub Desktop.
Save DariusL/f828fc573554e72e096f to your computer and use it in GitHub Desktop.
#pragma once
#include "includes.h"
template<typename... Factories>
class LoggerManager;
template<typename... Factories>
class LoggerHelper;
template<typename Factory, typename... Factories>
class LoggerManager<Factory, Factories...> : public LoggerManager<Factories...>
{
friend class LoggerHelper<Factory, Factories...>;
private:
using Logger = typename Factory::LoggerType;
Logger logger;
protected:
LoggerManager()
:LoggerManager<Factories...>(),
logger(Factory::Create()){}
public:
LoggerManager(LoggerManager&) = delete;
LoggerManager(LoggerManager&&) = delete;
inline void Log(e::string msg)
{
logger.Log(msg);
LoggerManager<Factories...>::Log(msg);
}
};
template<>
class LoggerManager<>
{
friend class LoggerHelper<>;
protected:
LoggerManager(){}
public:
LoggerManager(LoggerManager&) = delete;
LoggerManager(LoggerManager&&) = delete;
inline void Log(e::string msg){}
};
template<typename... Factories>
class LoggerHelper
{
public:
static void Log(e::string msg)
{
static LoggerManager<Factories...> manager;
manager.Log(msg);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment