void operator()()的功能
2024-10-09 09:23:12
在学习多线程的时候看到这样的一段代码,为什么要重载()
呢?真有这个必要吗?
#include <iostream>
#include <thread>
class Counter {
public:
Counter(int value) : value_(value) {
}
void operator()() {
while (value_ > 0) {
std::cout << value_ << " ";
--value_;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
std::cout << std::endl;
}
private:
int value_;
};
int main() {
std::thread t1(Counter(3));
t1.join();
std::thread t2(Counter(3));
t2.detach();
// 等待几秒,不然 t2 根本没机会执行。
std::this_thread::sleep_for(std::chrono::seconds(4));
return 0;
}
对 void operator()()的功能表示困惑
// 查阅了一些资料,这个是简易的说明代码
class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};
background_task f;
std::thread my_thread(f);
在这里,为什么我们需要operator()()?第一个和第二个()的意思是什么?其实我知道这是重载运算符的操作()
我们在学习C++的时候,学习过运算符重载。这里重载()
可以使对象像函数那样使用,常常被称为函数对象。 (这里用作线程对象的构造)
第一个()是运算符的名称 – 它是在对象上使用()时调用的运算符. 第二个()是用于参数的。
以下是您如何使用它的示例:
background_task task;
task(); // calls background_task::operator()
有参数的演示:
#include <iostream>
class Test {
public:
void operator()(int a, int b) {
std::cout << a + b << std::endl;
}
};
int main() {
Test t;
t(3,5);
return 0;
}
// 输出结果
// 8
最新文章
- getSupportFragmentManager要用在FragmentActivity及其子类中
- linux下部署项目问题
- CSS超出部分显示省略号…代码
- Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
- Android 签名(8)签名前用Zipalign简单优化
- mkfs.xfs命令没找到
- 用于做 Android 屏幕自适应的文章资源
- javascript之闭包深入理解(一)
- 关于XMLHttpRequest对象的responseText属性
- Unity3D 中材质球(Material)预制体打包成AB(AssetBundle)出现材质丢失问题的解决方案
- C# ASP.NET 转换为int型的方法 很实用
- 【转载三】Grafana系列教程–Grafana的配置及运行
- dubbo-admin在jdk8下不兼容
- 得到一个Object的属性
- [转]-[携程]-A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems
- 利用VRID/VMAC实现更安全的netscaler HA故障切换
- BZOJ 1854: [Scoi2010]游戏 并查集
- SpringCloud 进阶之分布式配置中心(SpringCloud Config)
- clang命令理解程序
- c++ 一般虚函数
热门文章
- Java容器面试总结
- JVM面试题总结
- 个人工作用SQL短句,不定时更新
- MySQL语句的使用
- 关于SPSS Modeler18 提示:用于定义的观测值的字段的值无效
- webpack4.X + react搭建
- 从发布-订阅模式谈谈 Flask 的 Signals
- 【error fixed】E: Package &#39;oracle-java8-installer&#39; has no installation candidate
- 每日一题 - 剑指 Offer 50. 第一个只出现一次的字符
- abp一代数据迁解析