Beispiel:
Code: Alles auswählen
template <typename T>
class MyClass
{
public:
void setValue(const T &value);
const T &getValue(void);
private:
T value;
};
int main(int argc, char *argv[])
{
std::map<std::string, MyClass*> clslist; // geht natürlich nicht
clslist["blub"] = new MyClass<int>;
...
clslist["blub"]->setValue<int>(5);
return 0;
};
Ich vermute fast, dass es keine wirkliche Lösung gibt, aber vielleicht hat ja jemand eine Idee.
Bitte keine Diskussion über schlechtes Design führen, ich muss bestehenden Code verwenden, kann aber den Klassencode auch ändern (wobei ich nicht alles umbauen möchte).
Noch eine Anmerkung: Die Klasse muss auch den Wert (value) vom entsprechenden Typ speichern (von mir aus auch in einem Wrapper oder ähnlichem), daher kann das Template nicht nur auf die Methoden beschränkt sein, sondern die Klasse soll tatsächlich ein Template nutzen oder wenigstens ein konsistenter Typ zwischen Methoden-Signatur und internem Datum bestehen. Gecastet werden darf.