使用扣除 this 的指向类方法的指针的类型与指向自由函数的指针的类型相匹配:
#include <iostream>
struct TA
{
void Foo(this auto&& self)
{
std::cout << "Foo call\n";
}
};
void test_TA()
{
TA a;
void (*fun_ptr)(TA&) = &TA::Foo<TA&>;
(*fun_ptr)(a);
}
int main()
{
test_TA();
}
这有点违反直觉。为什么要采用这种设计?在这种情况下,编译器使用指向类方法的指针的普通类型()会有什么困难吗void (TA::*mem_ptr)() &
?这很直观。
论文中对此有一条常见问题解答: