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 上调用 barf可以说是bar的隐式参数。使用 g(f) 显式传递该参数。


PS:当然这不是“魔术”,但我理解问题是关于隐式参数的一般含义,同时解释了 std::function 如何将成员函数转换为自由调用可能是另一个问题的主题。