假设我有类似以下的东西
struct Foo {
void goo() {printf("Test");}
}
external void _ZN3Foo3gooEv(Foo *f);
int main() {
Foo f;
_ZN3Foo3gooEv(&f);
}
能否通过函数的名称捆绑版本在此处调用Foo :: goo()?
编辑:
澄清一下,这只是一个实验,看看是否可以显式调用名称混淆的函数。这里没有进一步的目标。
我认为所有成员函数基本上将this指针作为它们的第一个参数。
我知道这不会链接,但我不明白为什么。我认为名称混淆发生在编译时,当链接器运行时,它会解析对名称混淆的函数的调用。(这就是为什么我想如果我们将_ZN3Foo3gooEv留作外部,它将转到符号表以查找它)。
我在这里误解了什么吗?
std::invoke
,可以让您将实例作为第一个参数传递,特别是用于像这样的成员函数指针的工作,还有奇怪的成员函数指针语法(object).*(ptrToMember)
。 - Mooing Duck