这是我想要实现的:我有一个类的列表(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++中找到等效的功能.
你在找这样的东西吗?
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)