Witam, mam template class:class CParam : CParamI {
public:
T operator=( T val ) {
value = val;
return value;
}
T getValue() {
return value;
}
virtual CString makeString();
private:
T value;
};
template<> CString CParam<float>::makeString() {
CString tmp;
tmp.Format( _T("%0.2f"), value );
return tmp;
}
template<> CString CParam<int>::makeString() {
CString tmp;
tmp.Format( _T("%0i"), value );
return tmp;
}
template<> CString CParam<COleDateTime>::makeString() {
return value.Format(dateFormat);
}
Czyli metoda makeString zalezy od typu klasy. Nastepnie by wrzucic obiekty tej klasy na std::map musialem stworzyc klase "interfejs" i z nie podziedziczyc moja klase CParam<T>.<code>class CParamI
{
public:
virtual CString makeString() {
CString txt = _T("");
return txt;
}
};
Teraz wrzucam obiekty na mape std::map<BYTE,CParamI*> uzywajac CParamI:
CParam<float> *floatParam = new CParam<float>;
map[x] = (CParamI*)floatParam
I niby wszystko ok. Ale co, gdy chce uaktualnic obiekt bedacy juz w mapie. Sciagne go z mapy, ale jest to obiekt klasy CParamI. Czy jest jakas inna metoda do wrzucania templatowych klas na kontenery stl? Czy recznie po sciagneciu z mapy przeciazac obiekt do odpowiedniego typu, np:
CParamI *o = mapa.find(xx)->second;
CParam<float> *fo = (CParam<float>*)o;
Czy to zadziala - no i chyba niezbyt elegancie, poza tym mozliwosc bledu typu. Bede wdzieczny za jakies uwagi. Pozdrawiam.