我試圖創建一個結構陣列,其連結輸入字符串類別如下:類查找結構陣列++
struct {string command; CommandPath cPath;} cPathLookup[] = {
{"set an alarm", AlarmCommandPath},
{"send an email", EmailCommandPath},
{"", NULL}
};
將被使用如下:
CommandPath *cPath = NULL;
string input;
getline(cin, input);
for(int i = 0; cPathLookup[i] != ""; i++) {
if(cPathLookup[i].command == input)
cPath = new cPathLookup[i].cPath;
}
顯然,這段代碼沒有意義,但我認爲我的意圖很明顯 - 根據輸入,我想將cPath初始化爲新的AlarmCommandPath或新的EmailCommandPath。我可以用一個函數根據輸入返回一個實例來處理它,但是整個ifs序列看起來不夠好看。
我還應該注意,如果它不明顯且重要,那麼AlarmCommandPath和EmailCommandPath是從CommandPath派生而來的,而CommandPath是一個抽象類。
感謝您提供任何幫助。
編輯:我只注意到,儘管COMMANDPATH是抽象的,我有一個聲明:
CommandPath *cPath = NULL;
的工作代碼。爲什麼編譯?
這可以做到沒有堆分配?我的意思是,這些工廠方法可以在堆棧上構造一個A或B或C並按值返回它嗎? – Segfault 2014-06-05 14:29:40