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

怎么把网站挂在服务器建筑网结构

怎么把网站挂在服务器,建筑网结构,商城网站建设步骤,浙江常升建设有限公司网站std__invoke 的使用 文章目录 std__invoke 的使用1. std::invoke 的功能2. 语法3. 使用场景1. 调用普通函数2. 调用成员函数3. 调用成员函数(通过指针或引用)4. 调用函数对象(仿函数)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 是 C++17 引入的一个标准库函数,用于简化函数调用的语法。它允许你通过统一的接口调用普通函数、成员函数、函数对象或者 Lambda 表达式。这使得在处理不同类型的可调用对象时代码更加简洁和一致。

1. std::invoke 的功能

std::invoke 的目的是让你可以通过统一的方式来调用:

  • 普通函数
  • 成员函数
  • 函数对象(仿函数)
  • Lambda 表达式

2. 语法

  template<typename _Callable, typename... _Args>invoke(_Callable&& __fn, _Args&&... __args){return std::__invoke(std::forward<_Callable>(__fn),std::forward<_Args>(__args)...);}
  • callable 是要调用的可调用对象(例如函数指针、成员函数指针、Lambda 表达式等)。
  • args... 是传递给 callable 的参数。

3. 使用场景

1. 调用普通函数

#include <iostream>
#include <functional>void 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 <functional>class 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 <functional>class 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 <functional>struct 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 <functional>int main() {auto greet = [](const std::string& name) {std::cout << "Hello, " << name << "!" << std::endl;};std::invoke(greet, "World");  // 调用 Lambda 表达式return 0;
}

4. std::invoke 的优势

  1. 简化代码:它可以统一调用不同类型的可调用对象(函数、成员函数、Lambda、函数对象等),避免了使用不同的调用方式。
  2. 类型推断:std::invoke 会自动推断参数类型,无需显式指定。
  3. 支持成员函数:它特别适用于调用成员函数,避免了使用 .*->* 等复杂语法。

5. 注意事项

  • std::invoke 是一个通用工具,适用于各种类型的可调用对象。
  • 它的本质是通过反射机制来判断和调用对象。

6. 示例:综合应用

#include <iostream>
#include <functional>struct 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.yayakq.cn/news/27544/

相关文章:

  • 网站开发亿码酷负责静态网站模板
  • 桂林网站定制网站建设 网络推广 网站优化
  • 怎么在免费空间里面做网站公司装修报价
  • 邯郸做网站找谁南宁专业网站制作前十排名
  • 青蛙网站建设114黄页的特点
  • 关于政务网站建设工作情况的总结专门做搜索种子的网站有哪些
  • 教育培训类网站建设模板网站开发合同付款方式
  • 做企业网站的公司seo内容优化心得
  • 东阿做网站怎么建设自己的网页
  • 网站收录了被人为删了怎么办企业seo推广外包
  • 一级a做爰片软件网站电商平台回应矿泉水箱内有老鼠
  • 长春建站怎么做淄博品质网站建设
  • 如何设计响应式布局网站织梦cms做网站教程视频
  • 宁夏网站建站北京王府井房价多少钱一平
  • 网站首页的模块布局泰兴网站设计
  • 商城网站开发背景网上做牙刷上什么网站
  • 返利网网站建设开发工具和开发平台
  • 织梦网站如何打通百度小程序广州现在可以正常出入吗
  • vs做的网站怎么发布奢侈品购物网站排名
  • 广东省城乡建设厅投诉网站首页精美网页模板
  • 网站建设 事业单位 安全外包公司能不能去
  • 海淀地区网站建设网站个免费的空间
  • 舆情服务网站wordpress编辑器不习惯
  • 网站与系统对接图文方案淘宝客网站的建设
  • 重庆制作网站公司简介wordpress模板dux主题
  • 高端网站建设一般多少钱拒绝做网站的理由
  • asp网站应用程序河南省机场集团
  • 网站建设商标保护网站建设 核对流程
  • 陕西省建设工程质量监督站网站21天打造你的个人品牌
  • 百度手机模板网站个人网页设计思路流程内容