Mozes ovako nesto ...
Broj podataka nije ogranicen ali jeste vrsta ... ali to moze lako da se prevazidje dodavajem funkcija itd.
Podatci se inicijalizuju prvim upisom,
Nisam mnogo razradjivao ali bi trebalo da je to to sto si trazio.
Code:
//
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//prouci i
//#include <typeinfo>
// cout << "a is: " << typeid(a).name() << '\n';
//prva klasa
class DataClass
{
public:
string value_name;
DataClass():type(0){}
inline bool SetValue(string s_value_name, int value){if(!type) {type = 1; value_name = s_value_name;} if(type == 1) {Int = value;return true;} return false;}
inline bool SetValue(string s_value_name, float value){if(!type) {type = 2; value_name = s_value_name;} if(type == 2) {Float = value; return true;} return false;}
inline bool SetValue(string s_value_name, string value){if(!type){type = 3; value_name = s_value_name;} if(type == 3) {String = value;return true;} return false;}
inline bool GetValue(string s_value_name,int& i){if(type == 1) {i = Int;return true;} return false;}
inline bool GetValue(string s_value_name,float& f){if(type == 2) {f = Float;return true;} return false;}
inline bool GetValue(string s_value_name,string& s){if(type == 3) {s = String;return true;} return false;}
private:
int type;
int Int;
float Float;
string String;
};
typedef vector<DataClass*> DC; // definisanje vektora tipa DataClass
//druga klasa
class DataContainer
{
public:
//set
void SetValue(string value_name, int value)
{
bool n = false;
DataClass* dc = GetData(value_name);
if(!dc)
{
dc = new DataClass();
n = true;
}
if(!dc)
return;
if(n && dc->SetValue(value_name,value))
data_list.push_back(dc);
}
void SetValue(string value_name, float value)
{
bool n = false;
DataClass* dc = GetData(value_name);
if(!dc)
{
dc = new DataClass();
n = true;
}
if(!dc)
return;
if(n && dc->SetValue(value_name,value))
data_list.push_back(dc);
}
void SetValue(string value_name, string value)
{
bool n = false;
DataClass* dc = GetData(value_name);
if(!dc)
{
dc = new DataClass();
n = true;
}
if(!dc)
return;
if(n && dc->SetValue(value_name,value))
data_list.push_back(dc);
}
//get
bool GetValue(string value_name, int& value)
{
DataClass* dc = GetData(value_name);
if(!dc)
return false;
return dc->GetValue(value_name,value);
}
bool GetValue(string value_name, float& value)
{
DataClass* dc = GetData(value_name);
if(!dc)
return false;
return dc->GetValue(value_name,value);
}
bool GetValue(string value_name, string& value)
{
DataClass* dc = GetData(value_name);
if(!dc)
return false;
return dc->GetValue(value_name,value);
}
private:
DataClass* GetData(string value_name)
{
if(!data_list.empty())
{
DataClass* dc = 0;
DC::iterator Iterator;
for (Iterator = data_list.begin(); Iterator != data_list.end();Iterator++)
{
dc = *Iterator;
if(dc->value_name == value_name)
return dc;
}
}
return (DataClass*) 0;
}
DC data_list; // vektor tipa DataClass
};
DataContainer Memory;
int main ()
{
int i1,i2;
Memory.SetValue("int_jedan", 1);
Memory.SetValue("int_dva", 2);
Memory.GetValue("int_dva", i2);
Memory.GetValue("int_jedan", i1);
float f1=1.0f, f2=2.0f;
Memory.SetValue("float_jedan", f1);
Memory.SetValue("float_dva", f2);
//zamenili smo mesta
Memory.GetValue("float_jedan", f2);
Memory.GetValue("float_dva", f1);
string s1, s2 = "s2 string";
Memory.SetValue("string_jedan", s2);
Memory.SetValue("string_dva", "s1 string");
Memory.GetValue("string_jedan", s2);
Memory.GetValue("string_dva", s1);
cout << "int_jedan " << i1 << endl;
cout << "int_dva " << i2 << endl;
cout << "float_jedan " << f1 << endl;
cout << "float_dva " << f2 << endl;
cout << "string_jedan " << s1 << endl;
cout << "string_dva " << s2 << endl;
return 0;
}
[Ovu poruku je menjao Eurora3D Team dana 26.08.2009. u 01:52 GMT+1]