C++基础:实现反射机制


c#中反射机制比较常见,而c++中没有该机制。使用c++实现反射机制,主要利用了工厂模式进程对象的生产。

ITest.h基类
Test.h继承类
helper.h帮助类
main.cpp主函数入口文件

//ITest.h

#pragma once
#include <map>
using namespace std;

class ITestFactory;
typedef map<string, ITestFactory*> MapFactory;
static MapFactory g_mapFactory;

class ITest
{
public:
	virtual ~ITest() {};
	virtual void TestPrint() = 0;

private:

};


class ITestFactory
{
public:
	void registerFactory(string clsName, ITestFactory* pFactory)
	{
		g_mapFactory.insert(make_pair(clsName, pFactory));
	}
	virtual ITest* intance() = 0;

};

//Test.h

#pragma once
#include "ITest.h"


class Test: public ITest
{
public:
     ~Test() {};
	 void TestPrint()
	 {
		 printf("im Test\n");
	 }

private:

};


class TestFactory :public ITestFactory
{
public:
	TestFactory()
	{
		registerFactory("Test", this);
	}
	~TestFactory() {};

private:
	ITest* intance()
	{
		static  ITest *m_pTest=NULL;

		if (NULL == m_pTest)
		{
			m_pTest = (ITest*)new Test;
		}
		return m_pTest;
	}

};


//Helper.h

#pragma once
#include "ITest.h"

ITest* GetClassByName(string clsName)
{
	ITestFactory *pFacory;
	map<string, ITestFactory*>::iterator iter;
	iter = g_mapFactory.find(clsName);
	if (iter!= g_mapFactory.end())
	{
		pFacory = iter->second;
	}
	else
	{
		return NULL;
	}
	
	return pFacory->intance();
}

//main.cpp

#include "pch.h"
#include <iostream>
#include "Helper.h"
#include "Test.h"

int main()
{
	static TestFactory m_testFactory; //通过构造注册工厂
    std::cout << "Hello World!\n"; 
	
	ITest *p = GetClassByName("Test");
	p->TestPrint();
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值