|
方法一:
#include <iostream>
#include <functional>
#include <string>
void print(std::function<std::string ()> const &f){
std::cout<<f()<<std::endl;
}
int main() {
std::cout << "Hello, World!" << std::endl;
int num = 101;
auto a = [&]//以引用的方式捕获本函数中的变量
() //无参数
->std::string {//返回值的类型为std::string
return std::to_string(num);
};
print(a);
num++;
print(a);
return 0;
}
例子2:
#include <iostream>
#include <thread>
#include <chrono>
#include <vector>
#include <atomic>
int main() {
std::atomic_uint num(0);//atomic_uint时原子操作类,在不同的线程中访问时,是线程安全的。
// 无参数lambda表达式
auto a = [&]() -> void {
std::this_thread::sleep_for(std::chrono::milliseconds(num*20));//休眠i*2ms
num += 100;
};
// 新建子线程
std::thread t(a);
t.join();
int value = num;
printf("%d\n",value);
// 有参数lambda表达式
auto b = [&](int i) -> void {
std::this_thread::sleep_for(std::chrono::milliseconds(i));//休眠i*2ms
num += i;
};
// 新建子线程
std::thread tt(b,1000);
tt.join();
value = num;
printf("%d\n",value);
return 0;
}
方法二:
#include <iostream>
#include <string>
template <typename F>
void print(F const &f){
std::cout<<f()<<std::endl;
}
int main() {
std::cout << "Hello, World!" << std::endl;
int num = 101;
auto a = [&]//以引用的方式捕获本函数中的变量
() //无参数
->std::string {//返回值的类型为std::string
return std::to_string(num);
};
print(a);
num++;
print(a);
return 0;
}
|
|