The class has a few problems: adressing members from member functions, and cleaning up. Anyways.. heres the class, and how I use it:
Code: Select all
#include <map>
#include <iostream>
using namespace std;
typedef void(*fPtr)();
class DynamicClass
{
public:
//add a new data member
void addDataMember(char* name, void* data)
{
DataMembers[name] = data;
}
//add a new member function
void addMemberFunction(char* name, void(*function)())
{
MemberFunctions[name] = function;
}
//get a data member from its name
void* getDataMember(char* name)
{
map<char*,void*>::iterator iter = DataMembers.find(name);
return iter->second;
}
//get a member function from its name
void (*getMemberFunction(char* name))()
{
map<char*,fPtr>::iterator iter = MemberFunctions.find(name);
return iter->second;
}
//the maps that holds the pointers
map<char*, void*> DataMembers;
map<char*, fPtr> MemberFunctions;
};
void function(int number)
{
cout<<"Test Function says: "<<number<<endl;
}
int main()
{
//create the class
DynamicClass *dc = new DynamicClass;
//add a data member (a int - value 23)
dc->addDataMember("Age", new int(23));
//get the added data member out of the class
int Age = *(int*)dc->getDataMember("Age");
//print it out
cout<<Age<<endl;
//add a member function
dc->addMemberFunction("Function", (fPtr)function);
//get the member function out of the class
void (*fTest)(int) = (void(*)(int))dc->getMemberFunction("Function");
//run the member function
fTest(4);
//delete a data member
delete (int*)dc->getDataMember("Age");
dc->DataMembers.erase("Age");
return 0;
}
