Class templates and STL Containers

0

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.

0

Nie chce mi się całego czytać więc odpowiem tylko na pytanie:

Czy jest jakas inna metoda do wrzucania templatowych klas na kontenery stl?

tak, robisz to dokładnie tak samo jako tablice dwuwymiarowe na vectorach:
vector< vector<int> > v;
czyli:
klasaszablonowa< innaklasaszablonowa< ... > > cos;

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0