30-01-2009, 10:44
|
|
|
|
חבר מתאריך: 08.10.02
הודעות: 827
|
|
קוד:
class bla
{
#ifdef WIN32
int AdditionW(int a,int b){ return a+b; }
#else
int AdditionL(int a,int b){ return a+b; }
#endif
bla()
{
#ifdef WIN32
Addition = &bla::AdditionW;
#else
Addition = &bla::AdditionL;
#endif
}
int (bla::*Addition)(int,int);
};
אני הייתי משתמש במשהו כזה:
קוד:
class bla {
public:
virtual int Addition(int,int) = 0;
virtual int Sub(int,int) = 0;
virtual int Mul(int,int) = 0;
virtual int Xor(int,int) = 0;
static bla *Create();
};
//Windows implementation
#ifdef WIN32
class bla_windows : public bla {
public:
int Addition(int a,int b) { return a+b; }
int Sub(int a,int b) { return a-b; }
int Mul(int a,int b) { return a*b; }
int Xor(int a,int b) { return a^b; }
};
#endif
//Linux implementation
#ifndef WIN32
class bla_linux : public bla {
public:
int Addition(int a,int b) { return a+b; }
int Sub(int a,int b) { return a-b; }
int Mul(int a,int b) { return a*b; }
int Xor(int a,int b) { return a^b; }
};
#endif
bla *bla::Create() {
#ifdef WIN32
return new bla_windows;
#else
return new bla_linux;
#endif
}
ואז שימוש:
קוד:
bla *a = bla::Create();
a->Addition(1,0);
delete a;
וכידי להוסיף למשל עוד מערכת הפעלה כל מה שנדרש זה לממש את המחלקה שוב ולהוסיף עוד שורה שתיים ל
Bla::Create()
ויש גם דרך להתגבר על המגבלה הזאת. אפילו על החובה של השימוש ב create ו delete אפשר להתגבר על ידי שימוש ב class שיכיל את זה.
_____________________________________
Error: Keyboard not found
Press F1 to continue
נערך לאחרונה ע"י maind בתאריך 30-01-2009 בשעה 10:55.
|