X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f From: "Traveler" Newsgroups: comp.lang.c++,comp.lang.c++.moderated,comp.os.msdos.djgpp Subject: Heterogenous object container without templates & type casting ??? Date: 12 Feb 2002 03:50:10 -0500 Organization: SAUNALAHDEN asiakas Lines: 65 Sender: cppmods AT netlab DOT cs DOT rpi DOT edu Approved: hsutter AT acm DOT org Message-ID: NNTP-Posting-Host: netlab.cs.rpi.edu X-Original-Date: Mon, 11 Feb 2002 03:42:34 +0200 X-Submission-Address: c++-submit AT netlab DOT cs DOT rpi DOT edu X-Auth: PGPMoose V1.1 PGP comp.lang.c++.moderated iQBVAwUAPGjXPkHMCo9UcraBAQFUBAH/cf3jS/bQDVDpNdYPycAGzCinqeDvwAsJ 4TftSlGcHhebQcUbVz5BQde3gerJsbWwDBHwsQZUlucxB7MvkPzSzQ== =ayQE To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Hi Is it possible to transform the following C code to C++ so that there is no need for type-casting ? I am trying to make a general object class that can contain any type without the use of templates. #include #include typedef struct A { void* _p; void* (*get)(struct A* this); } A; typedef struct { int* (*get)(A* this); } B; typedef struct { double* (*get)(A* this); } C; typedef struct { char* (*get)(A* this); } D; void* get1(A* this) {return this->_p;} int* get2(A* this) {return this->_p;} double* get3(A* this) {return this->_p;} char* get4(A* this) {return this->_p;} int main(int argc,char* argv[]) { int value = 66; A a = {&value,get1}; // Simple & dangerous way to "put" something in to void pointer "a._p" // because I had no patience to play games with "malloc" in this case....... B b = {get2}; // Takes care of the type casting.... C c = {get3}; D d = {get4}; printf("I am of type \"int\". My value is %i\n",*b.get(&a)); printf("I am of type \"double\". My value is %d\n",*c.get(&a)); printf("I am of type \"char\". My value is %c\n",*d.get(&a)); return(0); } Traveler traveler AT netti DOT fi [ Send an empty e-mail to c++-help AT netlab DOT cs DOT rpi DOT edu for info ] [ about comp.lang.c++.moderated. First time posters: do this! ]