#include <iostream>
#include <string>
class Base
{
public:
Base(std::string (*funcPointer)()) { execute = funcPointer; }
std::string (*execute)();
};
std::string StandaloneExecute()
{
return std::string("StandaloneExecute");
}
class Derived: public Base
{
public:
Derived() : Base(StandaloneExecute) {}
std::string execute() //this hides the parent execute
{
return std::string("Derived::Execute");
}
};
int main() {
Derived d;
std::cout << d.execute() << std::endl; //this will print Derived::Execute
std::cout << static_cast<Base>(d).execute() << std::endl; //this will print StandaloneExecute
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgQmFzZQp7CglwdWJsaWM6CglCYXNlKHN0ZDo6c3RyaW5nICgqZnVuY1BvaW50ZXIpKCkpIHsgZXhlY3V0ZSA9IGZ1bmNQb2ludGVyOyB9CgkKCXN0ZDo6c3RyaW5nICgqZXhlY3V0ZSkoKTsKfTsKCnN0ZDo6c3RyaW5nIFN0YW5kYWxvbmVFeGVjdXRlKCkKewoJcmV0dXJuIHN0ZDo6c3RyaW5nKCJTdGFuZGFsb25lRXhlY3V0ZSIpOwp9CgpjbGFzcyBEZXJpdmVkOiBwdWJsaWMgQmFzZQp7CglwdWJsaWM6CglEZXJpdmVkKCkgOiBCYXNlKFN0YW5kYWxvbmVFeGVjdXRlKSB7fQoJCglzdGQ6OnN0cmluZyBleGVjdXRlKCkgLy90aGlzIGhpZGVzIHRoZSBwYXJlbnQgZXhlY3V0ZQoJewoJCXJldHVybiBzdGQ6OnN0cmluZygiRGVyaXZlZDo6RXhlY3V0ZSIpOwoJfQp9OwoKCmludCBtYWluKCkgewoJRGVyaXZlZCBkOwoJc3RkOjpjb3V0IDw8IGQuZXhlY3V0ZSgpIDw8IHN0ZDo6ZW5kbDsgLy90aGlzIHdpbGwgcHJpbnQgRGVyaXZlZDo6RXhlY3V0ZQoJc3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PEJhc2U+KGQpLmV4ZWN1dGUoKSA8PCBzdGQ6OmVuZGw7IC8vdGhpcyB3aWxsIHByaW50IFN0YW5kYWxvbmVFeGVjdXRlCglyZXR1cm4gMDsKfQ==