我可以在C++中将类作为对象处理

use*_*556 4 c++ class

这是我想要实现的:我有一个类的列表(Class1到Classn)继承自主类我希望能够实现任何n类的对象,而无需做大的开关案例(或同等学历).类似的东西:

static ClassPointerType const * const ArrayOfClassTypes[]={ Class1, Class2, .. Classn }; 

static Class *GetObjectOfClass(int i)
{
  return new ArrayOfClassTypes[i](some parameters for the constructor);
}
Run Code Online (Sandbox Code Playgroud)

您可以在其他OO语言中执行此操作,例如Delphi,您可以使用TClass类型并获取对象的类...但我无法在C++中找到等效的功能.

Sim*_*ple 9

你在找这样的东西吗?

template<typename T>
std::unique_ptr<base> make()
{
    return std::unique_ptr<base>(new T);
}

class factory
{
    static constexpr std::unique_ptr<Base> (*fns[])(){make<derived_a>, make<derived_b>};

    std::unique_ptr<base> get_object_of_class(int const i)
    {
        if (i < 0 || sizeof fns / sizeof *fns <= i) {
            return nullptr;
        }

        return fns[i]();
    }
};
Run Code Online (Sandbox Code Playgroud)