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

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

我有一份档案:base.h

class 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+中有类似的东西吗?


慕勒3428872
浏览 404回答 3
3回答

PIPIONE

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

尚方宝剑之说

简单的回答是你不能。看看这些问题为什么:为什么C+没有反射?如何向C+应用程序添加反射?
打开App,查看更多内容
随时随地看视频慕课网APP