Ich muss eine Anzahl von Klassen (mehr als 50) aus einer Basisklasse erstellen, wobei der einzige Unterschied in den Namen der abgeleiteten Klassen besteht.Wie erstellt man abgeleitete Klassen aus einer Basisklasse mit Template-Programmierung in C++?
Zum Beispiel ist meine Basisklasse definiert als:
class BaseError : public std::exception
{
private:
int osErrorCode;
const std::string errorMsg;
public:
int ec;
BaseError() : std::exception(), errorMsg() {}
BaseError (int errorCode, int osErrCode, const std::string& msg)
: std::exception(), errorMsg(msg)
{
ec = errorCode;
osErrorCode = osErrCode;
}
BaseError (const BaseError& other)
: std::exception(other), errorMsg(other.errorMsg)
{
ec = other.errorCode;
osErrorCode = other.osErrorCode;
}
const std::string& errorMessage() const { return errorMsg; }
virtual ~BaseError() throw(){}
}
ich viel abgeleiteten Klassen von dieser Basisklasse zu schaffen, haben jeweils ihre eigene Konstrukteure haben, Copy-Konstruktor und die virtuelle Destruktorfunktion, ich derzeit am Kopieren/Einfügen der Code die Namen zu ändern, wenn nötig:
class FileError : public BaseError{
private:
const std::string error_msg;
public:
FileError() :BaseError(), error_msg() {}
FileError (int errorCode, int osErrorCode, const std::string& errorMessage)
:BaseError(errorCode, osErrorCode, errorMessage){}
virtual ~FileError() throw(){}
};
Frage: gibt es eine Möglichkeit, diese Klassen haben Vorlagen verwendet, so dass die im Plementation wird nicht wiederholt?
Etwas nicht verwandten Kommentar: Statt der eigenen 'const std :: string & Bereitstellung errormessage() const' Sie den virtuellen' const char * std :: exception reimplementieren Getter möchten :: was() const' Funktion Sie bekommen durch Übernahme von 'std :: exception'. –
Warum benötigen Sie abgeleitete Klassen? Wird ein einfacher 'typedef' nicht ausreichen? Soweit ich sehe, gibt es in abgeleiteten Klassen nichts Brauchbares. – Naveen
Wenn das Verhalten Ihrer abgeleiteten Klassen gleich bleibt, dann sollten Sie sich nicht für die templated Klasse entscheiden? – Arunmu