C++ Primer 第 5 版:指向成员函数的指针
C++ Primer 5th Edition: Pointer to member function
你好,我有这篇来自 C++ Primer 第 5 版的文章:
function<bool (const string&)> fcn = &string::empty;
find_if(svec.begin(), svec.end(), fcn);
Here we tell function that empty is a function that can be called with a string and returns a bool. Ordinarily, the object on which a member function executes is passed to the implicit this parameter. When we want to use function to generate a callable for a member function, we have to “translate” the code to make that implicit parameter explicit.
那么他的意思是:“当我们想使用函数时...使隐式参数显式化”?
指成员函数的隐式this
参数。他们得到一个指向引擎盖下传递的当前对象的指针。 std::function
有一些魔法可以将隐式参数转换为显式参数:
#include <iostream>
#include <functional>
struct foo {
void bar() { std::cout << "Hello World\n";}
};
int main() {
std::function< void (foo&)> g = &foo::bar;
foo f;
f.bar(); // bar takes no parameters, but implicitly it gets a pointer to f
g(f); // g(f) explicitly gets the parameter
}
使用 f.bar()
它的方法调用语法告诉我们我们在对象 f
上调用 bar
。 f
可以说是bar
的隐式参数。使用 g(f)
显式传递该参数。
PS:当然这不是“魔术”,但我理解问题是关于隐式参数的一般含义,同时解释了 std::function
如何将成员函数转换为自由调用可能是另一个问题的主题。
你好,我有这篇来自 C++ Primer 第 5 版的文章:
function<bool (const string&)> fcn = &string::empty;
find_if(svec.begin(), svec.end(), fcn);
Here we tell function that empty is a function that can be called with a string and returns a bool. Ordinarily, the object on which a member function executes is passed to the implicit this parameter. When we want to use function to generate a callable for a member function, we have to “translate” the code to make that implicit parameter explicit.
那么他的意思是:“当我们想使用函数时...使隐式参数显式化”?
指成员函数的隐式this
参数。他们得到一个指向引擎盖下传递的当前对象的指针。 std::function
有一些魔法可以将隐式参数转换为显式参数:
#include <iostream>
#include <functional>
struct foo {
void bar() { std::cout << "Hello World\n";}
};
int main() {
std::function< void (foo&)> g = &foo::bar;
foo f;
f.bar(); // bar takes no parameters, but implicitly it gets a pointer to f
g(f); // g(f) explicitly gets the parameter
}
使用 f.bar()
它的方法调用语法告诉我们我们在对象 f
上调用 bar
。 f
可以说是bar
的隐式参数。使用 g(f)
显式传递该参数。
PS:当然这不是“魔术”,但我理解问题是关于隐式参数的一般含义,同时解释了 std::function
如何将成员函数转换为自由调用可能是另一个问题的主题。