c++ 反射方法 纵向入参

本文介绍了如何在C++中通过闭包和映射来实现函数调用的参数处理。示例展示了如何创建并存储两个函数(get和post)的闭包,然后将它们作为值放入映射中,以便根据传入的参数调用相应的函数。通过这种方式,可以灵活地管理和调用不同参数的方法。
摘要由CSDN通过智能技术生成

纵向入参
简单举一下例子

//方法1
int get(std::string name,int age)
{
	return 10;
}

//方法2
std::string post(std::string name,int age,double height)
{
	return "20";
}

std::map<std::string,std::any> func_array;

//入参 闭包
std::functional<atd::any(std::map<std::string,std::any>)> func1 = [](std::map<std::string,std::any> params)
{
	return get(std::any_cast<std::string>(params["name"]),std::any_cast<int>(params["age"]));
};
func_array["get"] = func1 ;

std::functional<atd::any(std::map<std::string,std::any>)> func2 = [](std::map<std::string,std::any> params)
{
	return post(std::any_cast<std::string>(params["name"]),std::any_cast<int>(params["age"]),std::any_cast<double>(params["height"]));
};
func_array["post"] = func2 ;

//调用
std::map<std::string,std::any> params;

params["name"] = "名称";
params["age"] = 22;
params["height"] = 1.78;

std::any result1 = std::any_cast<std::functional<atd::any(std::map<std::string,std::any>)>>(func_array["get"])(params);

if(result1.type() == typeid(int))
{
	std::cout<< std::any_cast<int>(result1) <<std::endl;
}

std::any result2 = std::any_cast<std::functional<atd::any(std::map<std::string,std::any>)>>(func_array["post"])(params);

if(result2 .type() == typeid(int))
{
	std::cout<< std::any_cast<int>(result2 ) <<std::endl;
}
else if(result2 .type() == typeid(std::string))
{
	std::cout<< std::any_cast<std::string>(result2 ) <<std::endl;
}

纵向入参方法
下一章 用模板萃取成员方法 参数类型 返回值类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值