gpt4 book ai didi

c++ - std::function<> 和标准函数指针之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 13:23:38 25 4
gpt4 key购买 nike

std::function<> 和标准函数指针有什么区别?

即:

typedef std::function<int(int)> FUNCTION;
typedef int (*fn)(int);

它们实际上是一样的吗?

最佳答案

函数指针是在 C++ 中定义的实际函数的地址。 std::function 是一个包装器,可以容纳任何类型的可调用对象(可以像函数一样使用的对象)。

struct FooFunctor
{
void operator()(int i) {
std::cout << i;
}
};

// Since `FooFunctor` defines `operator()`, it can be used as a function
FooFunctor func;
std::function<void (int)> f(func);

这里,std::function 允许您准确抽象出您正在处理的可调用对象类型——您不知道它是 FooFunctor,您只知道它返回 void 并且有一个 int 参数。

当您将 C++ 与另一种脚本语言一起使用时,此抽象很有用的一个真实示例。您可能希望设计一个接口(interface),以通用方式处理 C++ 中定义的函数和脚本语言中定义的函数。

编辑: 绑定(bind)

除了 std::function,您还会发现 std::bind。这两者结合使用时是非常强大的工具。

void func(int a, int b) {
// Do something important
}

// Consider the case when you want one of the parameters of `func` to be fixed
// You can used `std::bind` to set a fixed value for a parameter; `bind` will
// return a function-like object that you can place inside of `std::function`.

std::function<void (int)> f = std::bind(func, _1, 5);

在该示例中,bind 返回的函数对象采用第一个参数 _1,并将其作为 传递给 func >a 参数,并将 b 设置为常量 5

关于c++ - std::function<> 和标准函数指针之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com