#include<iostream>
using namespace std;
class Base {
public:int val;
virtual void show() {
cout << "virtual void show()" << endl;
}
};
void* readVirtualfuncaddr(void *Obj,uint32_t i) {
uint32_t* virtualtable = (uint32_t*)(*((uint32_t*)Obj));
return (void *)(*(virtualtable+i));
}
int main() {
Base a;
Base* t = &a;
typedef void (*Func)(void);
Func p = (Func) readVirtualfuncaddr(&a, 0);
Func vfunc = (Func) * ((int*)*(int*)(&a));
(*p)();
return 1;
}
#include<iostream>
using namespace std;
class Base {
public:int val;
virtual void show() {
cout << "virtual void show()" << endl;
}
};
struct Test {
void* ptr;
int val;
};
void show() {
cout << "imitate virtual func" << endl;
}
int main() {
Test a;
void* p = show;
a.ptr =&p;
Base* pp =(Base *)&a;
pp->show();
return 1;
}