C++根据传入的函数指针来解析需要的参数(推荐)
C++可以根据传入的函数指针,获取自己需要的参数类型,然后根据参数源中获取需要的参数,这里我用tuple作为演示,不过,只要可以根据序号,或者顺序方式等获取实参,都可以使用类似的方式实现:
先给出一个辅助函数:
/**获取第N个类型 */ templatestructselect { }; template structselect :publicselect { usingThisType=T; usingBase=select ; };
下面给出实际的实现函数:
#include#include"vs-help.h" classTupleFunc { public: TupleFunc(){} //函数的实际构造过程 template voidmakeFuncAndParams(Ret(*func)(Args...),ParamsSource¶mSource) { makeFuncAndParamsImpl<0>(func,select (),paramSource); } //实际调用 voidinvoke() { m_func(); } private: //实际调用初始化 template voidmakeFuncAndParamsImpl(Func&&func,Select,ParamsSource¶mSource,Params&&...args) { typenameSelect::ThisTypeparam=std::get (paramSource); makeFuncAndParamsImpl (func,Select::Base(),paramSource,std::forward (args)...,std::move(param)); } //结束调用 template voidmakeFuncAndParamsImpl(Func&&func,select<>,ParamSource¶mSource,Params&&...args) { m_func=[func,args...](){func(args...);}; } private: std::function m_func; };
下面是测试用例:
voidprint(intx,std::stringy) { std::cout<<"x:"<p={12,"job","China"}; TupleFuncfunc; func.makeFuncAndParams(&print,p); func.invoke(); return0; }
通过使用lambda表达式,我们可以很方便的构建一个我们调用时需要的函数,而模板的存在,可以使我们在构建一个lambda表达式的时候,可以动态化,使某些情况下,更加灵活的构建各类处理函数map等。上面只是简单的演示,具体场景下,需要进行一定的修改。
总结
以上所述是小编给大家介绍的C++根据传入的函数指针来解析需要的参数,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。