当前位置: 首页 > news >正文

网站模版开发友情链接工具

网站模版开发,友情链接工具,南京网站定制公司,网站做的自适应体验差std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数#xff08;通过指针或引用#xff09;4. 调用函数对象#xff08;仿函数#xff09;5. 调用 Lambda 表达式 4. std::invoke 的优势…std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数通过指针或引用4. 调用函数对象仿函数5. 调用 Lambda 表达式 4. std::invoke 的优势5. 注意事项6. 示例综合应用总结 std::invoke 是 C17 引入的一个标准库函数用于简化函数调用的语法。它允许你通过统一的接口调用普通函数、成员函数、函数对象或者 Lambda 表达式。这使得在处理不同类型的可调用对象时代码更加简洁和一致。 1. std::invoke 的功能 std::invoke 的目的是让你可以通过统一的方式来调用 普通函数成员函数函数对象仿函数Lambda 表达式 2. 语法 templatetypename _Callable, typename... _Argsinvoke(_Callable __fn, _Args... __args){return std::__invoke(std::forward_Callable(__fn),std::forward_Args(__args)...);}callable 是要调用的可调用对象例如函数指针、成员函数指针、Lambda 表达式等。args... 是传递给 callable 的参数。 3. 使用场景 1. 调用普通函数 #include iostream #include functionalvoid print_hello(const std::string name) {std::cout Hello, name ! std::endl; }int main() {std::invoke(print_hello, World);return 0; }在这个例子中std::invoke 调用了普通函数 print_hello并传递了一个参数 World。 2. 调用成员函数 调用成员函数时需要额外提供对象实例或对象指针。 #include iostream #include functionalclass MyClass { public: void greet(const std::string name) {std::cout Hello, name ! std::endl; } };int main() {MyClass obj;std::invoke(MyClass::greet, obj, World);return 0; }在这个例子中std::invoke 调用了 MyClass 的成员函数 greet并传递了对象 obj 和参数 World。 3. 调用成员函数通过指针或引用 对于成员函数调用你可以传递成员函数指针和对象指针或者引用。 #include iostream #include functionalclass MyClass { public: void greet(const std::string name) const {std::cout Hello, name ! std::endl; } };int main() {MyClass obj;// 使用成员函数指针调用std::invoke(MyClass::greet, obj, World);// 或者可以传递对象指针MyClass* ptr obj;std::invoke(MyClass::greet, ptr, World);return 0; }4. 调用函数对象仿函数 std::invoke 同样适用于函数对象仿函数。 #include iostream #include functionalstruct MyFunctionObject { void operator()(const std::string name) const {std::cout Hello, name ! std::endl; } };int main() {MyFunctionObject obj;std::invoke(obj, World); // 调用仿函数return 0; }5. 调用 Lambda 表达式 std::invoke 也可以用于调用 Lambda 表达式。 #include iostream #include functionalint main() {auto greet [](const std::string name) {std::cout Hello, name ! std::endl;};std::invoke(greet, World); // 调用 Lambda 表达式return 0; }4. std::invoke 的优势 简化代码它可以统一调用不同类型的可调用对象函数、成员函数、Lambda、函数对象等避免了使用不同的调用方式。类型推断std::invoke 会自动推断参数类型无需显式指定。支持成员函数它特别适用于调用成员函数避免了使用 .* 或 -* 等复杂语法。 5. 注意事项 std::invoke 是一个通用工具适用于各种类型的可调用对象。它的本质是通过反射机制来判断和调用对象。 6. 示例综合应用 #include iostream #include functionalstruct MyClass { void greet(const std::string name) {std::cout Hello, name ! std::endl; }static void static_greet(const std::string name) {std::cout Hello from static function, name ! std::endl; } };int main() {MyClass obj;// 调用成员函数std::invoke(MyClass::greet, obj, Alice);// 调用静态成员函数std::invoke(MyClass::static_greet, Bob);// 调用 Lambdaauto lambda [](const std::string name) {std::cout Hello from lambda, name ! std::endl;};std::invoke(lambda, Charlie);return 0; }总结 std::invoke 是一个灵活、强大的工具它统一了函数、成员函数、函数对象和 Lambda 表达式的调用方式使得 C 中的可调用对象使用变得更加简洁和一致。
http://www.hkea.cn/news/14303929/

相关文章:

  • 龙岩网站设计培训公司起名字大全免费4个字
  • 忻府网站建设网站做哪些比较有意思
  • 域名分析网站惠州制作网站软件
  • 深圳中瑞建设集团官方网站wordpress轮播全屏
  • 甘肃温室大棚建设网站网站的集约化建设
  • 合肥定制网站建设公司wordpress常用库
  • 做蛋糕网站的优点宣传型企业网站
  • 河东建设局网站seo搜索引擎推广
  • 什么星网站做调查问卷的如何建设cf提卡网站
  • 有打赏功能的网站模板企业快速建站
  • 网站开发遵循的标准或规范58同城淄博网站建设
  • 网站建设管理权限广州番禺区邮编
  • 网站建设综合实训心得体会网站后台管理系统有哪些
  • 做网站安全维护是什么东东开公司需要什么手续和证件
  • 群晖建设网站国外网站 图片
  • 德州网站建设德州软件app开发公司哪家好
  • 分析竞争对手网站dedecms免费网站模板
  • 用户登录优化大师tv版
  • 微信上打开连接的网站怎么做的宜家设计装修怎么收费
  • 嘉兴网站建设定制网站福州销售网站设计企业
  • seo网站关键词优化快速官网我想自己做一个网站
  • 做淘宝的货源网站wordpress模板 更换
  • 国外销售网站网络营销推广方法有哪几种
  • 外贸网站建设方法需要建设网站的
  • 用pdf怎么做电子书下载网站成都cim软件公司
  • 高性能网站建设进阶指南pdfdw做网站的导航栏
  • 网站建设一定要买数据盘吗wordpress能用一个数据库
  • 网站备案后有什么好处wordpress好用的编辑器插件
  • 做代练网站能备案项目网络图最早开始时间
  • 关于网站建设新闻天津智能网站建设哪家好