C++:当不是所有的派生类都预先知道时使用继承?

标签 c++ class inheritance polymorphism derived

<分区>

Possible Duplicate:
Is there a way to instantiate objects from a string holding their class name?

我正在处理一些具有基类 InputFile 和许多派生类的 C++ 代码中的问题:TxtInputFileASCInputFile 等,其中每个派生类都是特定的输入类型。

我想做的是从命令行中取出一个变量,然后生成正确的派生类对象来处理指定的文件类型(例如用户指定的 TXT关闭命令行,因此,我生成了一个 TXTInputFile 对象并在 InputFile 标签下返回以供程序的其余部分使用)。

我可以用一串 IF/'ELSE` 语句来做到这一点,将用户输入与一堆预先确定的文件代码进行比较,但我希望能够添加对 future 新的文件类型,无需编辑一串 if 语句和添加新的文件代码等。

有什么方法可以在运行时访问某个编译器生成的所有派生类表到基类吗?

或者也许是某种基于传递的参数等于什么而动态绑定(bind)的多态构造函数?

(例如 InputFile(string)... TXTInputFile(string temp = "TXT"), ASCInputFile(string temp = ASC")...我意识到这是参数默认值的格式,只是想说明我的思路。)

提前致谢。

最佳答案

您可以创建一个从字符串到工厂函数的映射(可能使用 std::map)。

关于C++:当不是所有的派生类都预先知道时使用继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666999/

相关文章:

c++ - 将 win32 应用程序图标添加到任务栏

c++ - C 中快速复制的模式

c++ - 将派生类转换为具有相同公共(public)函数的泛型类类型,同时仍然可以调用派生类的函数

c++ - 在一个地方继承和 typedef(using)

c# - 建模 "I' m a * 但我也是一个 **”

c++ - 在没有 std::launder 的情况下将 std::aligned_storage* 重新解释为 T* 是否违反严格别名规则?

c++ - OpenCV:寻找 CPU 密集度较低的帧捕获+调整大小并进入缓冲方式:如何优化我的代码?

apache-flex - 复制类的实例

c++ - 两个类相互包含,下一段代码有什么问题?

c++ - 找出 vptr 字段