C++ 直接调用模板中传入的虚方法

mat*_*mat 5 c++ templates

我试图直接调用传递给模板的虚拟方法,但是,它变成了虚拟调用

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()

神螺栓链接