using与类函数指针实现多态

using与类函数数指针实现多态

概述

	1. 当想通过map(key, value)的形式来根据key调用类的函数。
	2. 所调用的函数模式一样:返回值, 参数列表均完全一致
	3. 唯一区别仅map的key, 以及其对应的成员函数指针。
	优点:
		可以实现类的成员函数多态使用
		可以与服务器之类的交互,提供单一的接口,根据消息不同处理不同的响应(也算多态的特性吧)
	缺点:
		模式固定
		只能适用一类似的函数多态

使用

	假设类名为 ClassUsing
	1. 类里面 using m_mapFunc = [return_type] (ClassUsing::*) ([parameterList]);
	2. 里定义与1模式一样的函数(函数名不一样)
	3. 类里定义map<key, m_mapFunc > m_mapFuncCall;(key, 可以用于区分map就好)
	4.  初始化m_mapFuncCall:  m_mapFuncCall[key] = &ClassUsing::2中的函数名
	5. 使用  [return_type] [variablename] = (this->*m_mapFuncCall[key]) ([parameterList]);

实例

	class ClassUsing
	{
	public:
	    ClassUsing();
	    void UsingFunc(const std::string  &msgType, const std::string str);
	
	public:
	    using classFunc = std::string (ClassUsing::*)(const std::string  &str);
	
	private:
	    std::string getName(const std::string  &str) { return str; }
	    std::string getAddr(const std::string  &str) { return str; }
	    std::string getInfo(const std::string  &str) { return str; }
	
	private:
	    std::map<std::string, classFunc> m_callFunc;
	};
	
	ClassUsing::ClassUsing()
	{
	    m_callFunc["name"] = &ClassUsing::getName;
	    m_callFunc["addr"] = &ClassUsing::getAddr;
	    m_callFunc["info"] = &ClassUsing::getInfo;
	}
	
	void ClassUsing::UsingFunc(const std::string  &msgType, const std::string str)
	{
	    auto iterFunc = m_callFunc.find(msgType);
	    if (iterFunc != m_callFunc.end())
	    {
	        (this->*( (*iterFunc).second) )(str);
	    }
	}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值