我试图创建一个结构阵列,其连结输入字符串类别如下:类查找结构阵列++
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