的命令行參數讓我們假設我有一些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) {...}
}
正如你可以看到,所有的繼承類有(可能)不同的構造。
現在,我想編寫一個通用main()
,是這樣的:
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
}
我不知道是否有做到這一點,例如直接char *argv[]
傳遞給每一個構造函數,使裏面的所有檢查一個最好的方法構造函數(並最終拋出異常,如描述here)。
您將無法脫身不得不檢查參數恕我直言匹配給定構造的,但我不會有污染類檢查代碼。我會寫一個帶'argc'和'argv'的工廠函數並返回適當類的實例。這將保持包含的檢查代碼。 – Unimportant