C++基础std::bind

目录

说明

举例子:


说明

std::bind是一个函数模板,用于创建一个可调用对象,该对象可以在稍后的时候被调用。bind的作用是将函数与参数绑定在一起,在调用时可以自动传入预定的参数值。

std::bind的基本语法如下:

template< class F, class... Args> /unspecified/ bind( F&& f, Args&&... args );

其中,F是需要绑定的函数或函数对象,Args是绑定函数所需的参数。

所以说可以认为bind是函数特殊引用

举例子:

cpp 复制代码
void f(int& n1, int& n2, const int& n3)
{
	std::cout << "In function: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
	++n1; // 增加存储于函数对象的 n1 副本
	++n2; // 增加 main() 的 n2
	// ++n3; // 编译错误
}

    int n1 = 1, n2 = 2, n3 = 3;
	std::function<void()> bound_f = std::bind(f, n1, std::ref(n2), std::cref(n3));
	n1 = 10;
	n2 = 11;
	n3 = 12;
	std::cout << "Before function: " << n1 << ' ' << n2 << ' ' << n3 << '\n';
	bound_f();
	std::cout << "After function: " << n1 << ' ' << n2 << ' ' << n3 << '\n';

输出如下,std::refstd::cref 是 C++ 标准库中的两个实用工具,它们分别用于创建对对象的引用和常量引用的包装器

上面例子还可以改成下面,我们根据情况分布绑定

cpp 复制代码
// using namespace std::placeholders;

auto bound_f = std::bind(f, _1, _2, std::cref(n3));
// _1是placeholders占位参数,可以之后传递 
bound_f(n1, n2);

例子2

当然也可以 绑定lambda表达式、成员函数之类,与上面例子出入不大,这里举个stl的用例

cpp 复制代码
void printValue(int& value) {
    std::cout << "Value: " << value << std::endl;
}

int main() {
    int x = 10;
    std::vector<std::function<void()>> funcs;

    // 使用 std::ref 包装 x 的引用,并将其存储在 funcs 中
    funcs.emplace_back(std::bind(printValue, std::ref(x)));

    // 调用函数,输出 "Value: 10"
    funcs[0]();

    return 0;
}
相关推荐
捕鲸叉4 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer4 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
青花瓷5 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
捕鲸叉7 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
Dola_Pan7 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法
yanlou2338 小时前
KMP算法,next数组详解(c++)
开发语言·c++·kmp算法
小林熬夜学编程8 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
阿洵Rain8 小时前
【C++】哈希
数据结构·c++·算法·list·哈希算法