のは、私はいくつかのC++抽象クラスを持っており、そのすべての継承されたクラスが別のコンストラクタを持っているとしましょう:コマンドライン引数
class Abstract{
//don't worry, there is some pure virtual method here
}
class A : public Abstract {
public:
A (int Afirst, std::string Asecond, int Athird) {...}
...
}
class B : public Abstract {
public
B (double Bfirst, std::int Bsecond) {...}
...
}
class C : public Abstract {
public
C (std::string Cfirst, double Csecond, int Cthird, float Cfourth) {...}
}
あなたが見ることができるように、すべての継承されたクラスは、(おそらく)別のコンストラクタを持っています。私はこれを行うための最善の方法がある場合は、疑問に思う例えば、各コンストラクタに直接char *argv[]
を通過させ、内部のすべてのチェックを行う
int main (int argc, char *argv[]){
if(argc < 2){
std::cerr<<"Too few arguments!"<<std::endl;
exit(1);
}
std::string type = argv[1];
Abstract *abs;
if(!type.compare("A"){
if(argc < 5){
std::cerr<<"Too few arguments for A!"<<std::endl;
exit(1);
}
abs = new A(atoi(argv[2]), argv[3], argv[4]);
}
//similar for B, C, D
}
:
は今、私は、ジェネリックmain()
を書くことのような何かをしたいですコンストラクタ(そして最終的にはhereのように例外をスローします)。あなたが一般的なようにそのような何かを行うことが
あなたは引数が与えられたコンストラクタ私見を一致させるかどうかを確認することから抜け出すことはできませんが、私はクラスを汚染しませんチェックコード。私は 'argc'と' argv'をとり、適切なクラスのインスタンスを返すファクトリ関数を書くでしょう。それは、チェックコードが含まれたままになります。 – Unimportant