我试图直接调用传递给模板的虚拟方法,但是,它变成了虚拟调用
class Test {
public:
virtual void func() {
printf("foo\n");
}
};
template <auto F, typename T>
void foo(T* instance) {
(instance->*F)();
}
int main() {
auto a = new Test;
a->Test::func(); // directly calls it
auto f = &Test::func;
(a->*f)(); // virtual call
foo<&Test::func>(a); // virtual call
}
Run Code Online (Sandbox Code Playgroud)
目的是foo<&Test::func>(a)做同样的事情a->Test::func()