OneInstance.h
#pragma once
#include <iostream>
#include <map>
typedef void* (*CallbackFunction)(void);
class OneInstance {
public:
std::map<std::string, CallbackFunction> ClassLib;
static OneInstance* GetInstance();
void Myfunction();
void RegClass(std::string ClassName, CallbackFunction UCallback);
void *GetClass(std::string ClassName);
private:
OneInstance();
static OneInstance* p_OneInstance;
};
OneInstance.cpp
#include "OneInstance.h"
OneInstance * OneInstance::p_OneInstance = 0;
OneInstance * OneInstance::GetInstance()
{
if (p_OneInstance == NULL) {
p_OneInstance = new OneInstance();
}
return p_OneInstance;
}
void OneInstance::Myfunction()
{
std::cout << "I'm " << __FUNCTION__ << std::endl;
}
void OneInstance::RegClass(std::string ClassName, CallbackFunction UCallback)
{
ClassLib.insert(std::pair<std::string, CallbackFunction>(ClassName, UCallback));
}
void * OneInstance::GetClass(std::string ClassName)
{
std::map<std::string, CallbackFunction>::iterator tmp;
tmp = ClassLib.find(ClassName);
if (tmp == ClassLib.end()) {
return NULL;
}
return tmp->second();
}
OneInstance::OneInstance()
{
std::cout << "I'm " << __FUNCTION__ << std::endl;
}