C ++: Ponteiro para versão monomórfica da função de membro virtual?

No C ++, é possível obter um ponteiro para uma função de membro (não estática) de uma classe e depois invocá-lo em um objeto. Se a função era virtual, a chamada é despachada dinamicamente, dependendo do tipo dinâmico do objeto. Também é possível (sem usar um ponteiro de membro) chamar funções de membro virtual de objetos monomorficamente, fornecendo explicitamente o escopo que contém a versão a ser usada. O código a seguir demonstra isso:

#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
}

O que eu gostaria de fazer é combinar os dois e obter um ponteiro para a versão monomórfica de uma função de membro; ou seja, quero um ponteiro para Foo :: foo, que sempre chama a versão de classe base de foo e imprime 1, mesmo que seja invocado em um Foo2. No entanto, não consegui encontrar uma maneira de fazer isso. É possível?

(Além da tediosa maneira manual de escrever uma nova função não virtual que faz a chamada monomórfica e, em seguida, obter um ponteiro para isso.)

questionAnswers(3)

yourAnswerToTheQuestion