C++:在不是所有派生类都预先已知的情况下使用继承
C++: Using inheritance when not all of the derived classes are known up front?
可能的重复:
有没有办法从包含对象类名的字符串中实例化对象?
我正在处理一些C++代码中的一个问题,该代码有一个基类InputFile
和许多派生类:TxtInputFile
、ASCInputFile
等,其中每个派生类都是特定的输入类型。
我希望能够做的是从命令行中删除一个变量,然后生成正确的派生类对象来处理所指示的文件类型(例如,用户在命令行中指示的TXT
,因此,我生成一个TXTInputFile
对象并在InputFile
标签下返回,以便在程序的其余部分中使用)。
我可以用一串IF
/"ELSE"语句来完成这项工作,将用户输入与一堆预先确定的文件代码进行比较,但我希望将来能够添加对新文件类型的支持,而无需编辑一串if语句和添加新文件代码等。
有没有任何方法可以在运行时访问基类的所有派生类的编译器生成的表?
或者可能是某种多态构造函数,它是根据传递的参数的值动态绑定的?
(例如InputFile(string)
…TXTInputFile(string temp = "TXT")
,ASCInputFile(string temp = ASC")
…我意识到这是参数默认值的格式,只是试图暗示我的思路。)
提前谢谢。
您可以进行从字符串到工厂函数的映射(可能使用std::map
)。
如果解析非常复杂,就不要使用自己的解析器。有很多选择,从旧的备用lex/yacc(或flex/bison)到Boost::Spirit再到ANTLR。Lex/yacc是一个LALR解析器,它生成代码。生成的代码有点难以理解和调试。Boost::Spirit更符合现代编程概念,ANTLR也是如此。基本思想是指定语法以及如何处理该语法。
- 在双重继承的情况下如何处理非标准构造函数
- 循环依赖,在继承类的情况下使用覆盖方法
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 类成员在继承的情况下用作模板参数
- c++ 中的函数重载如何在没有钻石继承的情况下工作?
- 虚拟继承情况下类的意外大小
- 虚拟继承情况下的 vtable
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 在我的情况下,多重继承是一种好的设计模式吗?
- 模板和unique_ptr继承情况下的重载解决方案
- 默认情况下,我如何在不使用继承的情况下使用所有构造函数
- 在这种情况下,继承类如何工作??.
- 在多个继承的情况下,C 编译器如何处理成员变量内存偏移
- 在 c++ 中类继承的情况下强制延迟方法解析
- 如何在不继承手柄的情况下分叉处理
- C++:在不是所有派生类都预先已知的情况下使用继承
- 如何在不使用继承的情况下'rename'模板实例化?
- 为什么在多重继承的情况下,QObject需要成为第一个
- 默认情况下继承构造函数 noexcept(true)
- 在匿名块的情况下继承是如何工作的