C++17:实现动态类型std::any

发布时间 2023-03-26 16:18:09作者: karinto

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、