构造一个由类列表中的索引选择的类,c ++

时间:2014-07-10 15:36:27

标签: c++

我正在寻找这个问题的解决方案:
我有一个父类MyParent和几个继承自MyParent的子类。我希望能够根据索引构造一个选定的类。例如,假设我有4个子类,它们在名为classesList的列表中,我希望能够调用classesList[2]();,其中2是所选类的索引。

我想知道如何制作这个列表,它应该有什么类型?我不希望在列表中实际初始化类,我只想要对构造函数的引用,以便只有当我从列表中选择索引时才构造它。

1 个答案:

答案 0 :(得分:3)

你可以有一个函数指针列表:

struct Base { virtual ~Base() {} };

struct X1 : Base { /* ... */ };
struct X2 : Base { /* ... */ };
struct X3 : Base { /* ... */ };
// ...

std::unique_ptr<Base> makeX1() { return std::unique_ptr<Base>(new X1); }
std::unique_ptr<Base> makeX2() { return std::unique_ptr<Base>(new X2); }
std::unique_ptr<Base> makeX3() { return std::unique_ptr<Base>(new X3); }
// ...

std::vector<std::unique_ptr<Base>(*)()> makers = { makeX1, makeX2, makeX3 };

用法:

void f(std::size_t class_index)
{
    auto p = makers[class_index]();
    // use p
}