1、通过void*或继承实现动态类型
struct A { }; struct B { }; struct C :A { }; struct D :A { }; int main() { //万能指针void* void* p = new A(); p = new B(); p = new vector<int>(); //父类型的指针可以指向子类型 A* a = new C(); a = new D(); }
2、在限定了类型种类后,可以通过union实现动态类型
struct var { union { int iv; double dv; char *sv; //char* sv }; var(const int& v) : iv{ v } {}; var(const double& v) : dv{ v } {}; var(const char* s) { int len = strlen(s); sv = new char[len + 1]; memcpy(sv, s, len + 1); } }; int main() { var x = 1234; show(x.iv); x = 3.14; show(x.iv, x.dv); x = "hello~~~"; show(x.iv, x.dv, x.sv); return 0; }
3、