Mail Archives: djgpp/2000/03/14/15:24:06
From: | "Traveler" <traveler AT netti DOT fi>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | TABLE OF POINTERS TO FUNCTIONS + OTHER
|
Date: | Tue, 14 Mar 2000 21:45:12 +0200
|
Organization: | SAUNALAHDEN SERVERIN asiakas
|
Lines: | 87
|
Message-ID: | <8am435$j8i$1@tron.sci.fi>
|
NNTP-Posting-Host: | mdxl.tdyn.saunalahti.fi
|
X-Trace: | tron.sci.fi 953062309 19730 195.197.83.140 (14 Mar 2000 19:31:49 GMT)
|
X-Complaints-To: | newsmaster AT saunalahti DOT fi
|
NNTP-Posting-Date: | 14 Mar 2000 19:31:49 GMT
|
X-Newsreader: | Microsoft Outlook Express 4.72.3110.5
|
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Hello to everyone !
(This is going to be long... Sorry !
traveler AT netti DOT fi)
I tried to make a table that can store pointers to any kind of functions
like the one below.
void func(void);
int func2(int,int);
long func3(int);
void* table[ ] = {func,func2,func3};
To my delight the compiler didn´t complain but when I actually tried to use
one:
table[2](5,6);
It generated the message "Error: 'table[2]' cannot be used as a function"
I suspect that this is becourse the table is actually a constant pointer.
So, what do I have to do to make a table of varied function pointers ?
Build my own table class that dynamically allocates memory and accepts any
kind of data ?
Possible use of templates ?
Any hints and tips please !
BONUS QUESTION :
When building my new class I have always hated making new version of access
functions to the various class members.
Example (trivial parts for this example left out...):
typedef unsigned char BYTE;
typedef unsigned long DWORD;
class Circle
{
public:
int getx(void)const {return x;} // No
sweat...
int gety(void)const {return y;} // Urgh !
BYTE getcolor(void)const {return color;} // Another one ??
DWORD getradius(void)const {return radius}; // I really hate this !!!
private:
int x;
int y;
DWORD radius;
BYTE color;
};
If this all could be done with say, a single overloaded operator then life
would be much easier !
I had following in mind:
// enum {X,Y,RADIUS,COLOR}; No, this won´t work becourse if I make
another class like 'POINT' then
// the 'index' COLOR will be 3 not 4. I think that I must make a enum that
is PART of the class...
class Circle
{
public:
template <class T> T operator()(const int index)const {return
table[index];}
enum {X,Y,RADIUS,COLOR};
private:
int table[4]; // Otherwise nice but I think I must make my own
table class
};
Usage:
Circle circle(160,100,10,BLUE);
cout << circle(CIRCLE::COLOR) << endl; // Not an elegant at all.
If I just could use the calls like
// circle(COLOR), rectangle(COLOR), etc...
If anybody has a way to make this easier then please tell me.
Stefan Fröberg
"Just a Traveler..."
- Raw text -