009
15.10.2004, 19:24 Uhr
~c0x
Gast
|
nun gut, eine class factory... für größere sachen wie zb renderer (in der spieleprogrammierung) ist das sicherlich angemessen, aber zb (wran ich zZ arbeite) nehmen wir mal eine string kllasse. es gibt mehrere implementationen für strings (eine implementation, die TCHAR arrays und c-funktionen benutzt, eine, die std::basic_string<TCHAR> verwendet und vlt. noch eine, die (MFC) CString benutzt) und nun möchte ich ein interface haben (zB IString), damit ich jede mögliche string implementation an funktionen übergeben kann, die strings als parameter nehmen. ich kam dabei auch schon auf vererbung (is ja auch egtl. das naheliegenste), aber als ich zu folgender methode (im interface) kam:
C++: |
// in der deklaration von IString... virtual IString SubString(std::size_t Offset, std::size_t Count = -1) const;
|
wusste ich nicht weiter bei den implementationen... wie sollte ich diese funktion überladen? ich kann in zB der STL String implementation kein IString zurück liefern, IString hat ja keine member (keinen member string), sodass ausdrücke wie:
C++: |
void func(IString& str) { cout << str.CharArray(); } STLString string(_T("Hallo")); func(string.SubString(3));
|
nicht mehr möglich sind, da in substring ein lokales stlstring objekt konstruiert wird, jedoch beim zurück geben zu einem istring wird, dessen chararray methode NULL zurück liefert... wie kann ich solche probleme denn umgehen/lösen?? |