In C++, it\'s possible to get a pointer to a (non-static) member function of a class, and then later invoke it on an object. If the function was virtual, the call is dispatc
To elaborate with a code example for a wrapper function (and despite the fact the OP wanted to avoid this method!) as in many cases this is the pragmatically preferable solution:
#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; }
};
void monomorphicFooFoo( Foo * f ) { f->Foo::foo(); }
int main()
{
Foo *foo = new Foo2;
void (*baseFoo)( Foo * ) = &monomorphicFooFoo;
baseFoo( foo ); // Prints 1
}
In other words : you want to cheat.
No, it is not possible because that is how the polymorphism in combination with pointer to member method works.
It's possible in GCC, but the way it's documented in C++ language extensions section suggests there's no portable way to do it.
You can do two things: