Re: template with STL container
"Nobody" <nobody@nowhere.com> wrote in message
news:pan.2011.10.05.08.52.07.605000@nowhere.com...
On Tue, 04 Oct 2011 16:16:00 +0200, softwareEngineer wrote:
Yes, but I need a vector of generic value (float, int, ecc.)
In which case, the values need a common base class, e.g.:
class MY_Value {
...
};
template <typename T>
class MY_Value_T : public MY_Value {
...
};
std::vector<MY_Value*> v;
MyValue_T<int> iV1 = 1;
MyValue_T<float> iV2 = 2.1;
v[0] = static_cast<MY_Value*>(&iV1);
v[1] = static_cast<MY_Value*>(&iV2);
Casting the vector elements back to their correct type is a bit more
involved, as you need to know what their correct type is, either by
using RTTI or by explicitly adding a tag field to the base class.
You can do this kind of thing if you have a limited set of different types:
template<class T1=float, class T2=int, class T3=std::string>
class Base{
public:
virtual operator T1(){return 0;}
virtual operator T2(){return 0;}
virtual operator T3(){return 0;}
};
template<class T, class T1=float, class T2=int, class T3=std::string>
class Derived:public Base<T1,T2,T3>{
T itsData;
public:
Derived(T x):itsData(x){};
virtual operator T(){return itsData;}
};
Derived<float> d1(-4.0/3.0);
Derived<std::string> d2("Hello");
std::vector< Base<>* > v1;
v1.push_back(&d1);
float f1 = *v1[0];
v1[0] = &d2;
std::string s1= *v1[0];
Its more difficult if you want unlimited amount of different types.
--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---