我只是想澄清我的知识差距。
给定以下代码:
我本以为";嗨"完全基于以下事实:在foo的范围内,FuncA的定义被覆盖,因此应该被调用。如图所示,情况并非如此https://onlinegdb.com/LzPbpFN3R
有人能解释一下这里发生了什么吗?
std::function<void()> FuncA;
void FuncB() {
if (FuncA) {
FuncA();
}
}
struct Foo {
void FuncA() {
std::cout << "Hi";
}
void FuncC() {
FuncB();
}
};
int main()
{
Foo foo{};
foo.FuncC();
return 0;
}
一旦调用了一个自由函数,就不再在类中。您丢失了特殊的this
指针。一种(相当C的(方式可能是:
void FuncB(struct Foo* a) { // expect a pointer to a Foo object
a->FuncA(); // call the method on the passed object
}
struct Foo {
void FuncA() {
std::cout << "Hi";
}
void FuncC() {
FuncB(this); // pass the special this pointer to the function
}
};