在看《大话设计模式》的策略模式中,使用了反射(用C#实现),在C++中没有反射,需要自己实现。在网上查了下资料,依葫芦画瓢实现了下。但发现在策略模式中实现反射时,需要传参数,于是把网上的实现改写了下,希望能够适用策略模式中的反射,实现按类名调用对应的类。
实现代码如下:
#pragma once
#include "stdafx.h"
#include <string>
#include <map>
using namespace std;
typedef void* (*CreateFunc)(void);
class ClassFactory
{
public:
static void* GetClassByName(std::string strName)
{
std::map<std::string, CreateFunc>::const_iterator finder;
finder = m_clsMap.find(strName);
if (finder == m_clsMap.end())
{
return NULL;
}
else
{
return finder->second();
}
}
static void RegistClass(std::string strName, CreateFunc method)
{
m_clsMap.insert(std::make_pair(strName, method));
}
private:
static std::map<std::string, CreateFunc> m_clsMap;
};
std::map<std::string, CreateFunc> ClassFactory::m_clsMap;
class RegistClass