成员函数有一个隐含的this
指针参数。为什么 std::function
接受这个签名,那么,这里的 S 是一个简单的类? ( complete sample )
std::function<void(S &)> func = &S::foo;
调用它也可以,并且可以区分对象:
S s1 = {5};
S s2 = {6};
func(s1); //prints 5
func(s2); //prints 6
我通常期望的是它需要一个指针,它也能正常工作:( complete sample )
std::function<void(S * const)> func = &S::foo;
S s1 = {5};
S s2 = {6};
func(&s1); //prints 5
func(&s2); //prints 6
当隐式 this
参数是指针时,为什么当我将引用传递给成员函数时第一个有效?
最佳答案
因为 std::function
的设计是正确的。 this
是一个指针这一事实是历史上的偶然事件,也是成员函数内部的一个细节。这个事实应该不会影响功能用户的设计决策。
当签名中的第一个参数类型是引用时,std::function
的设计者正确地决定接受成员函数。
关于c++ - 为什么 std::function 在签名中接受 this 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12523970/