#include <iostream>
class Super {
public: virtual void print() const {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
public: virtual ~Super() {}
};
class Sub : public Super {
public: virtual void print() const {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
};
int main() {
Super *obj = new Sub();
// how to call 'Super::print()' from 'obj'
// without using operator '.' and/or '->'?
typedef void (*PFUNC)(void *);
PFUNC pFunc = (PFUNC)&Super::print;
pFunc(obj);
delete obj;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCmNsYXNzIFN1cGVyIHsKICAgIHB1YmxpYzogdmlydHVhbCB2b2lkIHByaW50KCkgY29uc3QgewogICAgICAgIHN0ZDo6Y291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIHB1YmxpYzogdmlydHVhbCB+U3VwZXIoKSB7fQp9OwogCmNsYXNzIFN1YiA6IHB1YmxpYyBTdXBlciB7CiAgICBwdWJsaWM6IHZpcnR1YWwgdm9pZCBwcmludCgpIGNvbnN0IHsKICAgICAgICBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CiAKaW50IG1haW4oKSB7CiAgICBTdXBlciAqb2JqID0gbmV3IFN1YigpOwogICAgLy8gaG93IHRvIGNhbGwgJ1N1cGVyOjpwcmludCgpJyBmcm9tICdvYmonCiAgICAvLyB3aXRob3V0IHVzaW5nIG9wZXJhdG9yICcuJyBhbmQvb3IgJy0+Jz8KICAgIAogICAgdHlwZWRlZiB2b2lkICgqUEZVTkMpKHZvaWQgKik7ICAgIAogICAgUEZVTkMgcEZ1bmMgPSAoUEZVTkMpJlN1cGVyOjpwcmludDsKICAgIHBGdW5jKG9iaik7CiAgICAKICAgIGRlbGV0ZSBvYmo7Cn0=