std::invoke和std::function有什么区别?

5

当我们已经有了std::function,为什么还需要std::invoke?它们之间有什么区别?两者都用于调用可调用对象。那么添加新的模板的意义是什么呢?


13
我们已经有了一辆车,为什么我们还需要绿色?(简单来说,这两件事情有什么相似之处吗?) - Yakk - Adam Nevraumont
6
std::invokeтњїstd::functionт«їтЁеСИЇТў»тљїСИђуДЇСИюУЦ┐сђѓ - David
3
请观看Stephan T. Lavavej在cppcon 2015的演讲。 - NathanOliver
1
@Yakk 也许重点在于,你可以持有一个等效的std::function而不是函数指针或成员函数指针,并直接调用它。那么为什么还需要std::invoke呢? - Tavian Barnes
2
@TavianBarnes 确实,与其用绿色油漆涂抹玻璃墙,你可以将一辆汽车停在前面。两者都会阻挡光线。因此,在正确的情况下,绿色和汽车都是不透明的...如果 OP 只考虑了一个应用程序,那么不透明度可能就是问题的根源。我仍然希望从 OP 那里得到澄清。 - Yakk - Adam Nevraumont
显示剩余3条评论
1个回答

10

std::invoke 是一种通用的方式来调用任何可调用对象 - std::function、函数指针、成员函数指针、函数对象等。无需知道具体是哪种可调用对象,也不需要使用不同的语法。在泛型编程(模板)中特别有用。

另一方面,标准函数是一个可调用对象的通用容器,两者并不完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接