c++ - 为什么 std::function 在签名中接受 this 引用?

标签 c++ function this

成员函数有一个隐含的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/

相关文章:

c++ - 需要非常小的开源内核

c# - union 结构 C# - 等效或等于?

c++ - 调试断言失败。 BIG_ALLOCATION_ALLIGNMENT

excel - 在不同列之间计算excel中的单词 "pairs"

c++ - C++中Python中有没有类似于help()的函数

c++ - 将 std::vector<uint8_t> 转换为 std::string_view

java - 为字符串创建一个新行

javascript - Angularjs $scope 和这个函数

java - 接入提供商运营商通过this使用super的情况

javascript - 将 $this 传递给函数