指向绑定函数的指针只能用于调用函数 open
时间: 2023-05-09 11:03:25 浏览: 1919
指向绑定函数的指针只能用于调用函数 open,这是因为绑定函数是通过 std::bind 进行创建的,而 std::bind 返回的是一个函数对象,无法被直接赋值给函数指针。所以如果要将绑定函数赋值给函数指针并调用,必须使用 std::function 对象来存储它。
std::function 是 C++11 中的一种类型,它可以存储任何可调用对象,包括函数、函数指针、类成员函数、lambda 表达式等。因此,如果想要使用指向绑定函数的指针来调用 open 函数,可以先将绑定函数转换为 std::function 对象,再将该对象赋值给函数指针,如下所示:
std::function<int(const char*, int)> f = std::bind(open, "file.txt", std::placeholders::_1);
int (*pfn)(const char*, int) = f.target<int(*)(const char*, int)>();
//调用函数指针
int ret = pfn("mode");
在上述代码中,通过 std::function 对象 f 和函数指针 pfn 将绑定函数转换为函数指针并调用 open 函数。这种使用指向绑定函数的指针调用 open 函数的方式,既简洁又有效,因此被广泛运用于各种 C++ 程序中。
阅读全文