-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsketch.cpp
More file actions
89 lines (75 loc) · 2.24 KB
/
Copy pathsketch.cpp
File metadata and controls
89 lines (75 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*keeps a generic data member */
class DataMember
{
public:
void *data;//data member
std::string data_type;//keeps the type of data(like "int" or "MyClass")
};
class FunctionMember
{
public:
void * (* member)(void *); //function member
}
/*the dynamic object. */
class DynObject
{
//map<name of the member, DataMember
std::map<std::string, DataMember> members
std::map<std::string, FunctionMember> functions;
public:
//register a new data member to DynObject
bool add(void* _data, char* _data_type, char *member_name);
//return the DataMember corespunding to member_name
DataMember* call(char *member_name);
bool add_function(void * (* _function)(void *), char *function_name);
FunctionMember* call_function(char *member_name);
};
bool DynObject::add(void* _data, char* _data_type, char *member_name)
{
//add a new member to the members
//return true if success else return false
DataMember new_member;
new_member.data = _data;
new_member.data_type = _data_type;
return members.insert(std::pair<std::string, DataMember>(member_name, new_member));
}
// bool DynObject::add_function(void * (* _function)(void *), char *function_name);
// similar with add
DataMember* DynObject::call(char *_name)
{
return members.at(_name)
}
//FunctionMember* call_function(char *member_name);
//similar with call
//
int main()
{
DynObject dyObj;
int intMember = 1
MyClass myclassMember(12, "heigh");
//register new members in dynObj
dynObj.add((void *)&intMember, "int", "intMember");
dynObj.add((void *)&myClassMember, "MyClass", "myClassMember");
//Now use the data members
try
{
DataMember dm = dynObj.call(dynamic_choose);
switch(dynamic_choose):
{
case "int": *(static_cast<*int>)(dm.data) = 7;
case "MyClass":*(dynamic_cast<*MyClass>)(dm.data) = MyClass(32, "age");
}
}
catch(exception &e)
{
......
}
//#include my_function.h
//my_function(int, int)
dynObj.add_function(&my_function, "my_function");
try
{
FunctionMember fm = dynObj.call_function("my_function");
(*(my_function *)fm)(23, 23);
}
}