1068得票14回答
C++函数对象是什么?它们有什么用途?

我一直听到在C++中有关functor的许多内容。能否给我一个概述,告诉我它们是什么以及在什么情况下它们会有用?

142得票9回答
使用TypeScript构建一个具有属性的函数对象

我想创建一个函数对象,其中还保存着一些属性。例如在JavaScript中,我会这样做:var f = function() { } f.someValue = 3; 现在在TypeScript中,我可以描述this的类型为:var f: { (): any; someValue: number...

62得票3回答
函子是否比函数指针更快?

根据Scott Meyers的说法,C++比C更擅长的一个领域是函数对象比函数指针更快。他说这是因为函数对象被内联了,这增加了速度。 我有两个问题: 我们如何验证函数对象是否真的被内联了?我们可以在实践中验证吗? 函数对象的内联是否取决于我们使用的编译器,还是所有编译器都像这样执行? ...

57得票5回答
std::function的模板参数是如何工作的?(实现)

在Bjarne Stroustrup的主页(C++11 FAQ)中:struct X { int foo(int); }; std::function<int(X*, int)> f; f = &X::foo; //pointer to member X x; int ...

40得票2回答
通过引用重载多个函数对象

在C++17中,实现一个overload(fs...)函数变得简单,该函数接受任意数量的参数fs...,这些参数满足FunctionObject概念,并返回一个新的函数对象,其行为类似于fs...的重载。例如:template <typename... Ts> struct ove...

28得票7回答
重载“函数调用”运算符有什么用处?

我最近发现在C++中可以重载"函数调用"运算符, 这种方式看起来很奇怪,因为你需要写两对括号才能这样做:class A { int n; public: void operator ()() const; }; 然后像这样使用:A a; a(); 什么时候这个有用?

23得票4回答
使用lambda函数进行过载

如何重载一个简单的本地lambda函数? 原问题的SSE: #include <iostream> #include <map> void read() { static std::string line; std::getline(std::ci...

22得票3回答
为什么函数对象应该按值传递

我刚刚读了经典书籍“Effective C++, 3rd Edition”,在第20条中作者得出结论,内置类型、STL 迭代器和函数对象类型更适合于传值方式。我可以理解内置类型和迭代器类型的原因,但是为什么函数对象应该是按值传递呢?我们知道它毕竟是类类型。

21得票2回答
当static_cast后面跟着两对括号时,它的意思是什么?

这里说的是什么:return static_cast<Hasher &>(*this)(key); 我无法确定*this还是key被传递给static_cast。我查看了一些资料,发现这个答案,但与我遇到的问题不同,第一对括号中没有任何内容。

20得票4回答
在C++中,编译器将函数对象“内联”是什么意思?

在维基百科关于函数对象的文章中提到,当与for_each一起使用时,这些对象具有性能优势,因为编译器可以将它们“内联”。 在这个上下文中,我不太清楚这意味着什么...或者任何上下文,我很尴尬地说。感谢您的帮助!