指向虚拟成员函数的指针

Pointers to a virtual member functions

考虑以下代码

class BASE
{
  public:
            virtual void test_f(){std::cout<<"BASE::test_f\n";}
};

class DERIVED:public BASE
{
    public:
            virtual void test_f(){std::cout<<"DERIVED::test_f\n";}
};

void (BASE::*p_base)() = &BASE::test_f;

p_base 是指向 class 成员函数的指针,但它是多态的。 这意味着

DERIVED a;
(a.*p_base)();

将打印 DERIVED::test_f

如何获取指向基 class 的 test_f 的指针以进行非多态调用?

示例:

#include <iostream>
#include <functional>

class BASE
{
  public:
            virtual void test_f(){std::cout<<"BASE::test_f\n";}
};

class DERIVED:public BASE
{
    public:
            virtual void test_f(){std::cout<<"DERIVED::test_f\n";}
};

int main()
{
  // prints Derived
  void (BASE::*p_base)() = &BASE::test_f;
  DERIVED a;
  (a.*p_base)(); 
  auto f = std::mem_fun(&BASE::test_f);
  f(&a);
  
  // prints Base
  a.BASE::test_f();
  auto callLater = [&a]() { a.BASE::test_f();};
  callLater();  
}