Et hurtigt forsøg med en linket liste af "pointere" til funktioner i forskellige instanser af en class.
Spørg endelig hvis der er noget du ikke forstår, det er måske lidt langhåret.
#include <iostream>
class MyClass
{
public:
MyClass()
{
MyVar = 0;
}
enum FuncIdx
{
FuncInc,
FuncDec
};
int Inc()
{
return MyVar++;
}
int Dec()
{
return MyVar--;
}
int Disp(FuncIdx Idx)
{
switch(Idx)
{
case FuncInc:
return Inc();
case FuncDec:
return Dec();
}
return -1;
}
private:
int MyVar;
};
class LinkClass *List;
class LinkClass
{
public:
LinkClass *Next;
LinkClass(MyClass *Obj, MyClass::FuncIdx Idx)
{
Next = List;
List = this;
ObjPtr = Obj;
Func = Idx;
};
int DoIt()
{
return ObjPtr->Disp(Func);
}
private:
MyClass::FuncIdx Func;
MyClass *ObjPtr;
};
MyClass A, B;
int main(void)
{
// Build the linked list
LinkClass aaa(&A, MyClass::FuncDec);
LinkClass bbb(&A, MyClass::FuncDec);
LinkClass foo(&A, MyClass::FuncInc);
LinkClass bar(&A, MyClass::FuncInc);
LinkClass baz(&A, MyClass::FuncInc);
LinkClass two(&B, MyClass::FuncDec);
LinkClass one(&B, MyClass::FuncInc);
// Run thru the list, note we do them in reverse order (last first)
LinkClass *l;
for(l = List; l; l = l->Next)
std::cout << l->DoIt() << std::endl;
return 0;
}