【发布时间】:2014-11-01 19:36:33
【问题描述】:
以下程序同时使用 gcc 和 clang 进行编译,但这实际上是标准 C++11 还是两个编译器都为了方便而选择支持它?
struct Foo {
int i;
void bar() { std::cout << i << std::endl; }
};
int main() {
std::function<void(Foo*)> method = &Foo::bar;
Foo myFoo{4};
method(&myFoo); // prints 4
}
这当然很方便,但我不明白它是如何/为什么起作用的。
【问题讨论】:
-
它与任何类成员函数指针一样工作,需要
this来调用(只是隐藏了丑陋的东西)。你有什么特别不明白的?因为你的问题看起来有点太宽泛了。 -
是的,这是标准的。 G++ 在这里也支持这一点:gcc.gnu.org/onlinedocs/gcc/Bound-member-functions.html
-
@πάνταῥεῖ:我认为他很好奇这似乎是标准公开
this是成员函数的参数的实现细节的地方。 -
是的,@OliverCharlesworth 说的。
-
相关:How do i write a pointer-to-member-function with std::function?。在其中一个答案中很好地解释了这种“魔法”如何发挥作用。