std::function 使用例子
时间: 2023-09-05 14:08:29 浏览: 46
好的,以下是一个使用 std::function 的例子:
```c++
#include <iostream>
#include <functional>
void printName(std::string name) {
std::cout << "My name is " << name << std::endl;
}
int main() {
std::function<void(std::string)> func = &printName;
func("John");
return 0;
}
```
这个例子定义了一个名为 `printName` 的函数,它接受一个字符串参数并打印出一条消息。然后,我们定义了一个 `std::function` 对象 `func`,它可以接受一个 `std::string` 类型的参数并返回 `void`。我们将 `func` 初始化为指向 `printName` 函数的指针,并将字符串 "John" 作为参数传递给它。最终,我们将看到一条消息打印出来,显示出该函数已成功调用。
相关问题
std::function 举例子
以下是一个使用std::function的示例:
```c++
#include <iostream>
#include <functional>
void foo(int x) {
std::cout << "foo(" << x << ")" << std::endl;
}
class Bar {
public:
void operator()(int x) const {
std::cout << "Bar(" << x << ")" << std::endl;
}
};
void callFunc(std::function<void(int)> func) {
func(42);
}
int main() {
std::function<void(int)> func;
// 将函数指针赋值给std::function对象
func = &foo;
func(10);
// 将函数对象赋值给std::function对象
Bar bar;
func = bar;
func(20);
// 将Lambda表达式赋值给std::function对象
func = [](int x) {
std::cout << "Lambda(" << x << ")" << std::endl;
};
func(30);
// 将std::bind绑定的函数对象赋值给std::function对象
auto boundFunc = std::bind(foo, std::placeholders::_1);
func = boundFunc;
func(40);
// 将std::function对象作为参数传递给其他函数
callFunc(func);
return 0;
}
```
输出结果为:
```
foo(10)
Bar(20)
Lambda(30)
foo(40)
foo(42)
```
可以看到,std::function可以封装不同类型的可调用对象,并且可以像函数指针一样进行赋值、调用和传递。
std::is_function
`std::is_function`是C++11中的一个类型特征,用于检查给定类型是否为函数类型。需要注意的是,函数类型不包括`std::function`、lambda表达式以及具有重载`operator()`的类。以下是一个使用`std::is_function`的例子:
```cpp
#include <iostream>
#include <type_traits>
void foo() {}
int main() {
std::cout << std::boolalpha;
std::cout << std::is_function<decltype(foo)>::value << '\n'; // 输出:true
std::cout << std::is_function<int>::value << '\n'; // 输出:false
return 0;
}
```
上述代码中,`std::is_function<decltype(foo)>::value`返回`true`,因为`foo`是一个函数,而`std::is_function<int>::value`返回`false`,因为`int`不是一个函数类型。