C ++: ¿Puntero a la versión monomórfica de la función miembro virtual?

En C ++, es posible obtener un puntero a una función miembro (no estática) de una clase, y luego invocarlo en un objeto. Si la función era virtual, la llamada se despacha dinámicamente según el tipo dinámico del objeto. También es posible (sin usar un puntero miembro) llamar funciones miembro virtuales de objetos monomórficamente, proporcionando explícitamente el alcance que contiene la versión a usar. El siguiente código demuestra esto:

#include <iostream>
using std::cout; using std::endl;

struct Foo
{
    virtual void foo() { cout << 1 << endl; }
};

struct Foo2: public Foo
{
    virtual void foo() { cout << 2 << endl; }
};

int main( int, char** )
{
    Foo *foo = new Foo2;

    void (Foo::*foo_pointer)() = &Foo::foo;

    foo->foo();            // prints 2
    foo->Foo::foo();       // prints 1
    (foo->*foo_pointer)(); // prints 2
}

Lo que me gustaría hacer es combinar los dos y obtener un puntero a la versión monomórfica de una función miembro; es decir, quiero un puntero a Foo :: foo que siempre llama a la versión de clase base de foo e imprime 1, incluso si se invoca en un Foo2. Sin embargo, no he podido encontrar una manera de hacer esto. ¿Es posible

(Aparte de la tediosa forma manual de escribir una nueva función no virtual que hace la llamada monomórfica, y luego obtener un puntero a eso).

Respuestas a la pregunta(3)

Su respuesta a la pregunta