#include <iostream> using namespace std; struct ICP{ int id; }; struct Q752{ int id; }; class X { protected: enum{ DT =0, Q7}; static void *data; public: X(); ~X(); static void *get() { return data; } static void set(int type) { cout << "X::set()" <<endl; switch(type) { case DT: { cout << "case: ICP" <<endl; ICP* dt= new ICP; //cout << (int)dt << endl; dt->id = 10; data = dt; } break; case Q7: { cout << "case: Q752" <<endl; Q752* dt1 = new Q752; dt1->id = 20;// data = (Q752*)dt1; } break; default: cout << "Invlaid type"; } } static void delX(int type) { if(data) switch(type){ case DT: delete (ICP*)data; case Q7: delete (Q752*)data; default: cout<< "DEL ERROR" << endl; } } }; class A{ friend class X; public: A(); ~A() { X::delX(0); } static void set(int type) {X::set(type);} static ICP *get() { return (ICP *)X::get();} }; class B{ friend class X; public: B(); ~B(){ X::delX(1); } static void set(int type) {X::set(type);} static Q752*get() { return (Q752*)X::get();} }; int main() { cout << "Set() is Start!!" <<endl; A::set(0); cout << "Set() is Done!!" <<endl; return 0; }
X
X::data
void* X::data = 0; // Or whatever value you want to initialize this pointer to
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)