• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++根据传入的函数指针来解析需要的参数(推荐)

c++ 搞代码 4年前 (2022-01-06) 68次浏览 已收录 0个评论

C++可以根据传入的函数指针,获取自己需要的参数类型,然后根据参数源中获取需要的参数,具体实现方式大家参考下本文

C++可以根据传入的函数指针,获取自己需要的参数类型,然后根据参数源中获取需要的参数,来源gao@daima#com搞(%代@#码网这里我用tuple作为演示,不过,只要可以根据序号,或者顺序方式等获取实参,都可以使用类似的方式实现:

先给出一个辅助函数:

 /** 获取第N个类型 */ template  struct select { }; template  struct select : public select { using ThisType = T; using Base = select; };

下面给出实际的实现函数:

 #include  #include "vs-help.h" class TupleFunc { public: TupleFunc() { } // 函数的实际构造过程 template  void makeFuncAndParams(Ret(*func)(Args...), ParamsSource& paramSource) { makeFuncAndParamsImpl(func, select(), paramSource); } // 实际调用 void invoke() { m_func(); } private: // 实际调用初始化 template  void makeFuncAndParamsImpl(Func&& func, Select, ParamsSource& paramSource, Params&&...args) { typename Select::ThisType param = std::get(paramSource); makeFuncAndParamsImpl(func, Select::Base(), paramSource, std::forward(args)..., std::move(param)); } // 结束调用 template  void makeFuncAndParamsImpl(Func&& func, select, ParamSource& paramSource, Params&&... args) { m_func = [func, args...]() { func(args...); }; } private: std::function m_func; };

下面是测试用例:

 void print(int x, std::string y) { std::cout << "x: " << x << std::endl; std::cout << "y: " << y << std::endl; } int main() { std::tuple p = { 12, "job", "China" }; TupleFunc func; func.makeFuncAndParams(&print, p); func.invoke(); return 0; }

通过使用lambda表达式,我们可以很方便的构建一个我们调用时需要的函数,而模板的存在,可以使我们在构建一个lambda表达式的时候,可以动态化,使某些情况下,更加灵活的构建各类处理函数map等。上面只是简单的演示,具体场景下,需要进行一定的修改。

总结

以上所述是小编给大家介绍的C++根据传入的函数指针来解析需要的参数,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

以上就是C++根据传入的函数指针来解析需要的参数(推荐)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++根据传入的函数指针来解析需要的参数(推荐)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址