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、