基本クラスから数多くのクラス(50以上)を作成する必要があります。唯一の違いは派生クラスの名前にあります。私は現在、私はそれぞれが独自のコンストラクタを持つこの基本クラスから派生したクラスの多くを作成する必要がC++でのテンプレートプログラミングを使用して基本クラスから派生クラスを作成する方法は?
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(){}
}
、コンストラクタおよび仮想デストラクタ関数をコピーします。たとえば
、私の基底クラスは次のように定義されますイムので、テンプレートを使用して作成し、これらのクラスを持っているいくつかの方法があります :
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(){}
};
質問:午前のコピーが/必要に応じ名を変更したコードを貼り付けます補足は繰り返されませんか?
少し関係のないコメント:代わりに、あなた自身の 'のconstのstd ::文字列&にErrorMessageを(提供する)const'仮想'のconstのchar *のstd ::例外::何を()const'機能を再実装する場合がありますゲッターあなたは 'std :: exception'を継承しています。 –
なぜ派生クラスが必要ですか?単純な 'typedef'で十分ではないでしょうか?私が見た限りでは、派生クラスでは役に立ちません。 – Naveen
派生クラスの動作が同じであれば、ホエーはテンプレート化されたクラスには行きませんか? – Arunmu