大二第一學期的數據結構課程設計中,我寫的是一個族譜管理系統,用C語言寫的win console application,黑咕隆咚的,但是程序控制方式我采用的是類似linux shell那樣的命令行模式。後來覺得實現命令行控制的那部分代碼可以復用,所以在大二下學期用C++對這個模塊進行了改寫,寫出了我自認為可復用的代碼。
這學期,臨近考試月我們有操作系統課程設計,要求在linux下模擬實現一個命令解釋器,則上面提到的那個命令行控制模塊的代碼正好派上了用場。下面是我寫的命令解釋器的main.cpp代碼,這個shell只有9條命令。
CmdNode<ShellFunSet> shellCmds[9] = {//該數組的每一個元素對應該shell的一條命令
{"pwd",&ShellFunSet::pwd},//{"命令字符串",執行該命令的函數}
{"dir",&ShellFunSet::dir},
{"cd",&ShellFunSet::cd},
{"newdir",&ShellFunSet::newdir},
{"deldir",&ShellFunSet::deldir},
{"exit",&ShellFunSet::exit},
{"rename",&ShellFunSet::rename},
{"find",&ShellFunSet::find},
{"date",&ShellFunSet::date}
};
ShellFunSet osFunHolder;
CmdControl<ShellFunSet> cmdModul("YeShizhe@",9,osFunHolder,shellCmds);
cmdModul.run();//進入命令行控制模式
以上代碼中,可復用代碼由兩部分組成:
結構體 CmdNode<T>
類 CmdControl<T>
復用該代碼的方法就是根據需要編寫自己的T類,然後將它作為以上倆物的持有類。
我知道直到現在為止我什麼都沒講清楚,但請耐心看下去,下面是ShellFunSet的代碼,
該類不屬於可復用代碼的范疇。
class ShellFunSet{
public:
bool pwd(string order[]);
bool dir(string order[]);
bool cd(string order[]);
bool newdir(string order[]);
bool deldir(string order[]);
bool exit(string order[]);
bool date(string order[]);
bool rename(string order[]);
bool find(string order[]);
};