为了账号安全,请及时绑定邮箱和手机立即绑定

有办法从保存类名的字符串中实例化对象吗?

有办法从保存类名的字符串中实例化对象吗?

C++
慕勒3428872 2019-06-25 13:11:23
有办法从保存类名的字符串中实例化对象吗?我有一份档案:base.hclass Base;class DerivedA : public Base;class DerivedB : public Base;/*etc...*/另一个文件:BaseFactory.h#include "Base.h"class BaseFactory{public:   BaseFactory(const string &sClassName){msClassName = sClassName;};   Base * Create()   {     if(msClassName == "DerivedA")     {       return new DerivedA();     }     else if(msClassName == "DerivedB")     {       return new DerivedB();     }     else if(/*etc...*/)     {       /*etc...*/     }   };private:   string msClassName;};/*etc.*/有没有办法以某种方式将这个字符串转换成一个实际的类型(类),这样BaseFactory就不必知道所有可能的派生类,并且每个类都有if()?我能用这个字符串生成一个类吗?我认为这可以通过反思在C#中实现。C+中有类似的东西吗?
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

不,没有。我更喜欢这个问题的解决方案是创建一个字典,它将名称映射到创建方法。希望像这样创建的类,然后在字典中注册创建方法。


查看完整回答
反对 回复 2019-06-25
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

简单的回答是你不能。看看这些问题为什么:

  1. 为什么C+没有反射?

  2. 如何向C+应用程序添加反射?


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信